以下是API的开始。我正在尝试将其作为课程的一部分,这门课程严格来说是没有任何框架的node.js。
我的尝试是如果请求方法不允许,则拒绝400。
(如果methoArr
中的方法,则允许其他拒绝)
var http = require('http');
var fs = require('fs');
const url = require('url');
var os = require('os');
var helpers = require('./helperFunctions');
var cl = console.log.bind(console);
//init server and listen
http.createServer(function(req, res) {
//define req.url as array
let qs = url.parse(req.url).pathname;
//deal with favico request
if (req.url === '/favicon.ico') {
res.writeHead(200, {
'Content-Type': 'image/x-icon'
});
res.end();
return;
}
//return if method not allowed
const methodArr = ['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS'];
var allowedMethod = true;
cl(typeof req.method, typeof methodArr[0]);
if (
req.url != methodArr[0] &&
req.url != methodArr[1] &&
req.url != methodArr[2] &&
req.url != methodArr[3] &&
req.url != methodArr[4] &&
req.url != methodArr[5]
) {
allowedMethod = false;
}
if (allowedMethod) {
// cl('req.url: ', qs, 'helpers: ', helpers, 'req method: ', req.method);
res.writeHead(200);
res.write('end url: ' + qs + ' method: ' + req.method);
} else {
res.writeHead(400);
res.write(req.method + ' method not allowed\n' + 'methodArr#: ' + methodArr[0]);
}
res.end();
}).listen(3000, 'localhost');
if
逻辑似乎还可以,但是显然不是……尝试了切换但还是同样的问题。
如果您能以我的逻辑解释错误,将不胜感激。
答案 0 :(得分:1)
使用:
req.method
代替
req.url
状况良好。
if (
req.method != methodArr[0] &&
req.method != methodArr[1] &&
req.method != methodArr[2] &&
req.method != methodArr[3] &&
req.method != methodArr[4] &&
req.method != methodArr[5]
){
allowedMethod = false;
}
或者您可以使用以下代码:
if(methodArr.indexOf(req.method) < 0){
allowedMethod = false;
}