Nodejs的Express之同路由HEAD请求却执行GET函数问题


Hi, I’m Shendi


Nodejs的Express之同路由HEAD请求却执行GET函数问题




问题描述

在 Express 中,当编写 GET 与 HEAD 相同路由的接口,会发现一个惊奇的问题,即HEAD请求,执行的却是GET函数!

router.get('/test', (req, res, next) => {
    
    
    console.log("get");
});
router.head('/test', (req, res, next) => {
    
    
    console.log("head");
});


问题解决

就是这样的坑,找到浪费了很多的时间。

通过查阅文档:https://nodejs.cn/express/4x/api/app/#METHOD

有着这么一句:

如果 app.get() 之前的路径没有调用 app.head(),则除了 GET 方法之外,还会为 HTTP HEAD 方法自动调用 app.get() 函数。


也就是说,相同路由,HEAD请求会先调用GET,然后再调用HEAD(貌似要通过next()才可以,我懒得测了)

解决办法就是直接使用 all,通过判断 req.method 来调用不同函数

router.all('/test', (req, res, next) => {
    
    
    if (req.method == "POST") {
    
    
        testPost(req, res, next);
    } else if (req.method == "GET") {
    
    
        testGet(req, res, next);
    } else if (req.method == "HEAD") {
    
    
        testHead(req, res, next);
    } else {
    
    
        next();
    }
});



END

猜你喜欢

转载自blog.csdn.net/qq_41806966/article/details/134460758