مشکل اول این کد توی اینه که وقتی درخواست بفرستید به آدرس پایین ارور میده. دلیلش اینه که parts[3] استرینگ هست و باید length براش چک بشه
http://localhost:8080/api/user/ #with extra slash at the end
اصلاح تابع
function getAPIControllerMethodName(req) { parts = req.parsedURL.pathname.split('/'); return { controller: (parts[2] != undefined ? parts[2] : 'Home'), method: (parts[3].length != 0 ? parts[3] : 'index') //This line is changed. }; }
مشکل دوم وقتی هست که query string میدیم به api
اگه به این صورت باشه: http://localhost:8080/api/user?q=1 علامت سوال رو هم جزو اسم کنترلر در نظر میگیره.
البته با حل مشکل اول حالت : http://localhost:8080/api/user/?q=1 ارور نمیده اما بدون اسلش ارور میده.
اصلاح برای حل مشکل دوم:
function getAPIControllerMethodName(req) { bigParts = req.parsedURL.pathname.split( '?' ); //New Line. parts = bigParts[0].split('/'); return { controller: (parts[2] != undefined ? parts[2] : 'Home'), method: (( parts[3] != undefined && parts[3].length != 0 ) ? parts[3] : 'index') //Changed Line }; }
ترتیب چک کردن parts[3] توی شرط مهمه چون اول باید وجودش بررسی بشه بعد اگه وجود داشت طولش بررسی بشه.
با این تغییرها این چهار آدرس باید بدون ارور پاسخ بدن در حالی که قبلا فقط آدرس اول بدون ارور بود:
http://localhost:8080/api/user http://localhost:8080/api/user/ http://localhost:8080/api/user?q=1 http://localhost:8080/api/user/?q=1