Node.js仅允许支持的方法

时间:2018-07-12 13:34:52

标签: node.js rest if-statement

以下是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逻辑似乎还可以,但是显然不是……尝试了切换但还是同样的问题。 如果您能以我的逻辑解释错误,将不胜感激。

1 个答案:

答案 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;
}