【问题标题】:Express default route parameterExpress 默认路由参数
【发布时间】:2016-03-12 05:53:47
【问题描述】:

我很惊讶我找不到这个,所以它之前可能已经回答过了(我正在寻找错误的东西)。

基本上,是否有可能以及如何在 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 中我可以这样做:

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

【问题讨论】:

标签: node.js express routes


【解决方案1】:

您设置正确,但之后需要从请求对象中获取参数,它不会自动传递给操作:

req.params.id

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

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

如果您想设置默认值,请执行以下操作:

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

【讨论】:

  • 啊,是的,这是有道理的,我意识到现在发生了什么(我也有一个控制器文件,我没有粘贴代码,现在将添加到我的问题中)。所以基本上因为有一个 if 语句,如果它没有设置也没关系,因为你可以在那里设置它然后对吗?
  • 我扩展了答案,希望是你需要的
猜你喜欢
  • 1970-01-01
  • 2016-08-21
  • 2014-09-18
  • 2012-09-12
  • 2019-02-06
  • 1970-01-01
  • 2021-01-08
  • 2017-01-17
  • 2020-05-17
相关资源
最近更新 更多