【问题标题】:Express routing - calling routes inside routes快速路由 - 在路由内调用路由
【发布时间】:2016-11-15 14:34:35
【问题描述】:

我有一个使用数据(标题和内容)渲染 register.pug 的获取路线。

// GET /register.pug
router.get('/register', function(req, res, next) {
  res.render('register', {
    title: 'Register', 
    countries: [] //countries
  });
});

我还有一条从我的数据库中检索国家/地区的路线,我可以使用它来获取我上面的渲染的“国家/地区”数据吗?

// GET /contries
router.get("/", function(req, res){

    //Result from Sequelize query
    var contries = [{
        name: Denmark,
        ISO: DK
    }, {
        name: Sweden,
        ISO: SE
    }];

    res.status(200).send(contries);
});

【问题讨论】:

    标签: express routing


    【解决方案1】:

    据我所知,您不能直接使用这些值,因为它们在另一个函数中。

    您可以创建一个中间件函数,该函数从数据库中获取国家/地区,然后使用下一个函数使用国家对象调用您的路由:

    app.use(function(req, res, next) {
        // how I imagine the sequelize call
        Country.findAll().then(function(countries) {
            next(countries);
        });
    });
    
    app.get('/register', function(countries, req, res, next) {
        res.render('register', {
            title: 'Register', 
            countries: countries
        };
    });
    
    app.get('/', function(countries, req, res, next) {
        res.status(200).send(contries);
    });
    

    此外,如果您尝试以 json 格式发送国家/地区,在“/”路由中,您可能希望使用 json 函数而不是 sendhttp://expressjs.com/en/api.html#res.json

    【讨论】:

    • 谢谢 ikkuh :) 你会这样做吗,还是你会放弃中间件功能,只在两条路由中都有 sequelize 语句?
    • 我会在两条路由中复制 sequelize 语句,我的 find 调用目前都是单个 sequelize 调用。
    • 这也是因为我不知道如何在特定路由之前轻松设置中间件功能,而不是像我的示例中的所有路由。我还在学习 express。
    • 我认为这可能也是最好的。谢谢你的回复:)
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2020-11-13
    相关资源
    最近更新 更多