【发布时间】:2026-02-19 06:15:01
【问题描述】:
我们使用的是 restify 6.4.0,而不是 404 用于不存在的端点,我们得到 405(不允许的方法)。
我已经确定了这一行server.opts('.*', (req, res) => res.send(204)); 的核心问题。出于某种原因,当它出现时,405 问题就出现了。当我删除它时,restify 开始按预期工作(404 表示不存在的端点,405 表示存在不同 HTTP 方法的现有端点)
这是工作示例
var restify = require('restify');
const server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});
server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());
server.opts('.*', (req, res) => res.send(204));
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
当我使用邮递员并拨打localhost:8080/noo时,这是响应
{
"code": "MethodNotAllowed",
"message": "GET is not allowed"
}
但是,当我删除 server.opts('.*', (req, res) => res.send(204)); 行时,我得到了预期的结果
{
"code": "ResourceNotFound",
"message": "/noo does not exist"
}
我不清楚为什么会发生这种情况 - 尝试了 Postman 和另一个 Node.js 代码,以确保它不是由 Chrome 或其他浏览器完成的一些飞行前请求引起的。使用此代码调用服务器:
var request = require('request');
var options = {
'method': 'GET',
'url': 'http://localhost:8080/noo',
'headers': {
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
给我这个回复
{"code":"MethodNotAllowed","message":"GET is not allowed"}
(和邮递员一样,当我删除server.opts... 行时,我得到了正确的响应
{"code":"ResourceNotFound","message":"/noo does not exist"}
有人可以解释发生了什么吗?
【问题讨论】:
标签: javascript node.js request cors restify