我正在构建基于express的REST API,我想在用户使用错误的HTTP谓词来警告用户。
目前,我正在添加
app.all('/', (req, res) => {
answer(req, res, {code: 400, error: 'Wrong method'});
});
在每条路线之后,它开始变得不可疏忽,我宁愿在一个地方拥有它,并列出我想听的所有路线。
有没有办法做类似的事情:
app.all(['/', '/signup', '/login'], (req, res) => {
answer(req, res, {code: 400, error: 'Wrong method'});
});
这样我只有一点失败,而不必检查每条路线?
答案 0 :(得分:2)
Paths can be Regular expressions too,以下内容应该有效:
app.all(/(signup|login)/, (req, res) => {
answer(req, res, {code: 400, error: 'Wrong method'});
});
答案 1 :(得分:1)
您可以使用对url路径和方法的检查来定义函数,并在传递给 app 的中间件中使用它来处理此错误情况。
只需在路线前定义它。
这是一个例子:
app.use(function(req, res, next){
if (checkIfIsWrongMethod(req)) {
answer(req, res, {code: 400, error: 'Wrong method'});
} else {
next();
}
});
这是expressjs FAQ。
答案 2 :(得分:1)
Express使用path-to-regexp来匹配路径路径;有关定义路径路径的所有可能性,请参阅path-to-regexp文档。 Express Route Tester是一个用于测试基本Express路由的便捷工具,但它不支持模式匹配。
您可以使用/^(signup|login)\/(.+)/
。见DOCS
在你的情况下:
app.all(['/^(signup|login)\/(.+)/'], (req, res) => {
answer(req, res, {code: 400, error: 'Wrong method'});
});