حل یکی از باگ ها Web API

پرسیده شده
فعالیت 884 روز پیش
دیده شده 393 بار
2

سلام و وقت بخیر خدمت استاد دادخواه
استاد یکی از باگ هایی که من پیدا کردم این بود که اگر انتها 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')
    };
}
فایل پیوست

امیرعلی طاهری
امیرعلی طاهری

7 شهریور 00

1
حذف شده

سلام

تشکر

میتونستید فقط pop کنید و return اضافه است چون کدش با return بعدی یکسانه و میشه کد را مختصرتر کرد

فایل پیوست

مهرداد دادخواه

توسط

مهرداد دادخواه

2 آبان 00

2
حذف شده

سلام. کد بالا دوتا ایراد داره.

یکی رو خود استاد گفتن که کد داپلیکیت شده و کار تکراری داره انجام میشه.

اما اگه به شکل زیر نوشته بشه، برای آدرسی که آخرش / نداره، میره روی حالت 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/
فایل پیوست

محمد افضلی

توسط

محمد افضلی

5 آبان 00

0
حذف شده

ممنون از همکاری

بله درسته در این شرایط به جای اینکه هر دو آدرس سرو بشود (هم با اسلش و هم بدون آن) مبنا را روی یکی از آنها میذارن و مورد دیگه را روی آن ریدایرکت میکنند

یعنی با اسلش روی بدون اسلش یا برعکس ریدایرکت میشه و بعد آن آدرس سرو شده خواهند

فایل پیوست

مهرداد دادخواه

توسط

مهرداد دادخواه

5 آبان 00

جلسه اولین Web API - , وب‌سروری کامل‌تر با NodeJs