اگر وقت کنم چیزایی که یاد گرفتم رو می نویسم
روتینگ فارسی برای 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] بسازید
امیدوارم مفید باشه :)
مطلبی دیگر از این انتشارات
رفع مشکل صفحه سیاه در vsCode
مطلبی دیگر از این انتشارات
نحوه نمایش رنگی تصاویر png سفید با کد رنگ دلخواه
مطلبی دیگر از این انتشارات
Event Capturing و Event Bubbling در جاوااسکریپت