URL中的空请求参数让我无法找到API错误

时间:2017-12-20 06:56:59

标签: node.js express

我的代码是:

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>

有没有什么,我的代码中缺少它以使其工作?

2 个答案:

答案 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