我的代码是:
xyz.js
const testFunction = (req, res) => {
req.checkParams('xyz_name', 'Invalid name').notEmpty();
req.sanitize('xyz_name').trim();
const errors = req.validationErrors();
if (errors) {
res.json({
status: '500',
message: errors
});
} else {
res.json({
status: '200',
message: 'list',
data: req.params.xyz_name
});
}
};
module.exports = testFunction;
app.js
app.get('/test/xyz/:xyz_name', test);
当我尝试http://localhost:3000/test/xyz/abc
时,它运行正常。但是当我输入http://localhost:3000/test/xyz
时,它会给我错误
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /test/xyz</pre>
</body>
有没有什么,我的代码中缺少它以使其工作?
答案 0 :(得分:3)
如果Express.js中有可选参数,则需要使用?
指定。
/test/xyz/:xyz_name
将与/test/xyz/test
匹配,但不会与/test/xyz
匹配。这基本上是将xyz_name
设置为必需参数。如果没有提供,它将失败。
/test/xyz/:xyz_name?
将匹配/test/xyz/test
和/test/xyz
。这是将xyz_name
设置为可选参数。如果没有提供任何东西,路线仍会被击中。
答案 1 :(得分:1)
这是因为您的路由配置为需要SELECT * FROM items (SELECT DISTINCT type FROM items WHERE type = 'credit')
"WHERE type = 'month' OR type = 'income' OR type = 'regular' OR type = 'credit' AND" +
" month = " + monthOfYear + " ORDER BY day ASC, _id ASC
参数。由于未提供,因此无法找到正确的路线匹配,这是预期的。
如果您希望路线处理请求是否提供参数,我相信您必须将参数设为可选参数:
xyz_name