Express默认路由参数

6

我很惊讶地发现我找不到这个问题的答案,所以它可能已经被回答了(而且我可能搜索错了东西)。

基本上,如何在nodejs express路由中设置默认值,是否可能?

// Test route
router.route('/tests/:id')
    .get(testsController.tests.get);

如果:id未设置,则会自动设置为任意值,例如1。

控制器代码:

var testsController = {
    tests: {
        get: function (req, res, next) {
            if (req.params.id) {
                res.render('tests.html', { title: 'The Site', id: req.params.id });
                next();
            } else {
                //res.redirect('/')
                console.log('here');
            }
        }
    }
};

我知道在PHP Symfony2中我可以这样做:

我知道在PHP Symfony2中我可以这样做:

/**
 * @Route("/tests/{id}")
 * @param Request $request
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function testAction(Request $request, $id=1)
{
}

这可能会对你有所帮助 http://expressjs.com/en/api.html#app.param - santaka
1个回答

19
您的设置是正确的,但您需要从请求对象中获取参数,它不会自动传递到操作中。
req.params.id

[编辑] 为了使参数可选,您应该像这样定义路由:


router.route('/tests/:id?')
    .get(testsController.tests.get);

如果您想设置默认值,请这样做:

res.render('tests.html', { title: 'The Site', id: req.params.id || 1 });

啊,是的,这很有道理,我现在明白发生了什么(我也有一个控制器文件,但我没有粘贴代码,现在会添加到我的问题中)。所以基本上因为有一个if语句,即使它没有被设置,也没关系,因为你可以在那里设置它,对吗? - timhc22
我扩展了答案,希望这是你所需要的。 - Joanvo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接