【问题标题】:How use next() properly in routes (node.js)如何在路由中正确使用 next() (node.js)
【发布时间】:2015-01-13 05:38:07
【问题描述】:
var s_bookingController = require('s/controllers);

app.get('/dashboard/:page/:param', s_bookingController.index)
app.get('/dashboard/show/:id', s_bookingController.show);

控制器:

exports.index = function(req, res, next) {
    var page = parseInt(req.param("id"));

    data = {};
    data.page = page;
    data.nextPage = page + 1;
    data.prevPage = page - 1;

    MyModel.find().sort('brand').skip((page-1)*11).limit(11).exec(function(err, result) {
        res.render('index', {
            data: data,
            booking: result,
        });
    });
};

exports.show = function(req, res, next) {
    var id = req.param("id");

    res.send(id);
};

我正在使用这个控制器,但是exports.index 的代码有问题,因为它卡在了代码中。

如果我将路线更改为:

app.get('/dashboard/:page', s_bookingController.index)

(注意我要去掉我传递的第二个参数)

节目可以,但是如果我使用第二个参数,节目将无法运行,它会卡在索引页面中。

这是为什么?我想知道是否需要使用next();

【问题讨论】:

标签: javascript node.js


【解决方案1】:

扩展我的评论:

您应该具有以下路线顺序:

app.get('/dashboard/show/:id', s_bookingController.show);
app.get('/dashboard/:page/:param', s_bookingController.index);

快速路由要求将更具体的路由置于更通用的路由之上。

/dashboard/show/:id 在这种情况下更具体,因为/dashboard/:page/:param 覆盖了它,因此/dashboard/show 由它处理。处理路由时,不会执行下一个路由。

【讨论】:

  • 我明白.. 但是,标准是什么?为什么节目更具体@VsevolodGoloviznin ??
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2021-07-06
  • 2014-01-27
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多