سلام و وقت بخیر خدمت استاد دادخواه
استاد یکی از باگ هایی که من پیدا کردم این بود که اگر انتها url یک / اضافی میخورد نمیتونست وب سرور ما فایلی یا api رو تشخیص بده
سعی کردم با اضافه کردن یک شرط و نادیده گرفتن / جلوی ارور رو بگیرم
خیلی ممنون
function getAPIControllerMethodName(req) {
parts = req.parsedURL.pathname.split('/');
if (parts.pop() == '/') {
parts.pop();
return {
controller: (parts[2] != undefined ? parts[2] : 'user'),
method: (parts[3] != undefined ? parts[3] : 'index')
}
}
return {
controller: (parts[2] != undefined ? parts[2] : 'user'),
method: (parts[3] != undefined ? parts[3] : 'index')
};
}
سلام
تشکر
میتونستید فقط pop کنید و return اضافه است چون کدش با return بعدی یکسانه و میشه کد را مختصرتر کرد
سلام. کد بالا دوتا ایراد داره.
یکی رو خود استاد گفتن که کد داپلیکیت شده و کار تکراری داره انجام میشه.
اما اگه به شکل زیر نوشته بشه، برای آدرسی که آخرش / نداره، میره روی حالت Controller not found.
function getAPIControllerMethodName(req) {
parts = req.parsedURL.pathname.split('/');
if (parts.pop() == '/') {
parts.pop();
}
return {
controller: (parts[2] != undefined ? parts[2] : 'user'),
method: (parts[3] != undefined ? parts[3] : 'index')
};
}
علتش هم دوبار استفاده کردن از pop هست که داره parts رو تغییر میده.
حالا برای حل این مشکل بهتره توی if از slice استفاده بشه .
function getAPIControllerName(req) {
let parts = req.parsedURL.pathname.split('/');
// if url was like: .../api/ remove the last '/'
if (parts.slice(-1)[0] === '') {
parts.pop();
}
return {
controller: (parts[2] !== undefined ? parts[2] : 'home'),
method: (parts[3] !== undefined ? parts[3] : 'index')
};
}
الان برای دو آدرس زیر، خروجی یکسان داریم:
http://localhost:3333/api/user
http://localhost:3333/api/user/
همینطور برای این دو آدرس خروجی یکسان داریم:
http://localhost:3333/api
http://localhost:3333/api/
ممنون از همکاری
بله درسته در این شرایط به جای اینکه هر دو آدرس سرو بشود (هم با اسلش و هم بدون آن) مبنا را روی یکی از آنها میذارن و مورد دیگه را روی آن ریدایرکت میکنند
یعنی با اسلش روی بدون اسلش یا برعکس ریدایرکت میشه و بعد آن آدرس سرو شده خواهند