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
方法之外,还会为 HTTPHEAD
方法自动调用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