اگر وقت کنم چیزایی که یاد گرفتم رو می نویسم
روتینگ فارسی برای next js
اون دسته از عزیزانی که با next js کار کردن می دونن که روتینگ فارسی نداشت و کلی داستان داریم براش تا بتونیم روت های استاتیک و یا داینامیکی بسازیم

یعنی اگر بخوایم داشته باشیم
http://localhost:3000/سلامباید توی فایل هامون یه
سلام.jsایجاد کنیم و داخلش کدمون رو بنویسیم ولی خب به دلیل این که UTF-8 در فایل سیستم متفاوته با UTF-8 در url همچنان صفحه 404 خواهیم داشت یعنی چی ؟
بذارید یه مثال بزنم
کلمه "سلام" رو در زبان فارسی در نظر بگیرید
این در محیط دسکتاپ برابر است با :
\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85ولی در url برابر است با :
%D8%B3%D9%84%D8%A7%D9%85خب واضحه که این دو تا رشته با هم برابر نیستن پس وقتی ما در محیط دسکتاپ یه فایل ایجاد می کنیم next سعی می کنه
http://localhost:3000/%D8%B3%D9%84%D8%A7%D9%85رو باز کنه در فایل سیستم دنبالش می گرده ولی پیدا نمی کنه چون در فایل سیستم چنین چیزی ذخیره شده
http://localhost:3000/\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85خب حالا فهمیدیم مشگل کجاس
چطوری حلش کنیم ؟
جناب next یه کانفیگی داره به اسم Rewrites که با استفاده از اون می تونیم بگیم از روی فایل سیستم تشخیص نده و فایل ها رو از اونجایی که ما می گیم بخونه در واقع روال قبلی next رو داره دور می زنه و این امکان رو به ما می ده تا بگیم تو کدوم روت چه فایلی رو بخونه
بذارید با مثال بریم جلو :
فرض کنید محتویات فایل next.config.js یه پروژه ای به این صورته :
module.exports = {
async rewrites() {
return [
{
source: '/about',
destination: '/',
},
]
},
}این یعنی محتویات صفحه
http://localhost:3000/aboutداره از فایل index.js پروژه خونده می شه
خب این دقیقا چیزیه که ما لازم داریم با یکم تغییرات بیاید برای
http://localhost:3000/سلامامتحان کنیم یعنی :
module.exports = {
async rewrites() {
return [
{
source:`/${encodeURI("سلام")}`,
destination: '/hello',
},
]
},
}اون /hello که می بینید در واقع یک فایل hello.js توی پوشه pages ساختیم و اون مقدار
${encodeURI("سلام")}دقیقا انکد شده "سلام" هستش
این طوری پیج های غیر داینامیکی رو می تونیم به فارسی روت کنیم حالا بازم اگر لازم باشه همچین روتی داشته باشیم
http://localhost:3000/سلام/hiباید داخل فایل next.config.js براش کانفیگ کنیم تا بشناسه یعنی
module.exports = {
async rewrites() {
return [
{
source:`/${encodeURI("سلام")}`,
destination: '/hello',
},
{
source: '/${encodeURI("سلام")}/hi',
destination: '/hello/hi',
},
]
},
}برای پیج های داینامیکی بعد از روت فارسی هم می تونیم اینطوری کانفیگ بنویسیم
module.exports = {
async rewrites() {
return [
{
source: '/${encodeURI("سلام")}',
destination: '/hello',
},
{
source: '/${encodeURI("سلام")}/:id',
destination: '/hello/:id',
},
]
},
}توجه کنید برای این که id رو بگیرید باید توی فولدر pages/hello یک فایل به اسم id].js] بسازید
امیدوارم مفید باشه :)
مطلبی دیگر از این انتشارات
فلاکس چیست و با ریداکس چه تفاوتی دارد؟
مطلبی دیگر از این انتشارات
شبه المنت ها و شبه کلاس ها در css
مطلبی دیگر از این انتشارات
نحوه نمایش رنگی تصاویر png سفید با کد رنگ دلخواه