【问题标题】:Node js requests before render page渲染页面之前的节点js请求
【发布时间】:2018-01-14 04:12:36
【问题描述】:

最近开始学习node js,有个问题。 在渲染页面之前,我想向 mongodb 发出 2 个或更多请求,然后渲染页面。

目前我有这样的东西:

exports.index = function(req, res) {

Manga.find({}, function(err, data){
    if(err) console.log('error in getting some mangas');
    res.render('index', {data: data, session: req.session.userId });
});

};

但我也想在渲染之前获取会话用户的数据。我该怎么做?

【问题讨论】:

  • 您已经拥有req.session.userId。在其他任何地方都这样做有什么问题?
  • 假设我必须得到一些其他信息,提出第二个请求:P
  • 还有什么数据?是否在会话中?
  • 2 个数据库请求

标签: javascript node.js mongodb


【解决方案1】:

首先您需要将关于用户的数据保存到会话对象中,然后调用:

res.render('index', {
                     data: data,
                     sessionID: req.session.userId,
                     email:req.session.emaill,
                     user_name: req.session.user_name
                    })

【讨论】:

  • 好吧,假设我需要在导航栏中知道用户是否已登录。我是否需要在每个请求中包含这些信息?
  • 是的,如果您使用 express,您可以将其添加到对路由器的所有请求中。
  • 我创建了答案底部。
【解决方案2】:

用快递:

app.get("/",function(req,res,next){

  Manga.find({}, function(err, data_from_db){
    if(err) console.log('error in getting some mangas');
    //    set user data from DB in every request
    req.session.user_data=data_from_db
    next()
  })
})//get
.......
.......
app.get("/index",function(req,res){

res.render('index', {
                     data: data,
                     sessionID: req.session.userId,
                     email:req.session.emaill,
                     user_name: req.session.user_name
                    })
})//index

或者,如果页面需要此数据,您可以使用模板引擎中的全局函数和异步过滤器直接请求用户数据。 https://mozilla.github.io/nunjucks/api#custom-filters

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2018-10-26
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多