节点JS表达框架sendFile(“home.html”,{context?})

时间:2018-03-20 01:26:55

标签: node.js express render sendfile

我正在阅读Express框架文档,制作我的基本登录/重定向页面路由。 以下路线接受提交:

app.post('/',function(req,res){
//console.log("USERNAME: "+req.body.username);
//console.log("PASSWORD: "+req.body.password);
res.redirect('/chat');
});

和此:

app.get('/chat', function(req, res){
    res.sendFile(__dirname + '/templates/chat.html');
    //console.log("request");
});

将用户带到新页面。 如何发送上下文?我应该使用res.render()吗?这两个函数似乎都不包含{username:req.body.username}等数据的选项。如何在路线之间传递数据?

1 个答案:

答案 0 :(得分:0)

一般来说,使用express来处理登录时,你会使用类似passport's local strategy的东西,它会为每条路径为你的请求对象(req.user)附加一个用户对象。我不知道你正在尝试的东西会在更大的上下文中工作 - 你至少需要某种基于会话的中间件,比如express-session,所以你可以在每个会话中附加变量(I认为它给你req.session)。默认情况下,express可以存储一个请求/响应周期(res.locals)或整个应用实例(即所有用户)(app.locals)的信息。

就将数据导入视图而言,您可以将res.render与EJS,pug或其他视图引擎一起使用。例如,如果在您的路线中,您有类似的内容:

route.get('/', (req, res) => {
  res.render('template', { username: 'yourname' })
}

你可以在你的ejs模板中引用它,如下所示:

<h1>Hello, <%= username %>!</h1>

将以此形式发回:

<h1>Hello, yourname!</h1>

所以,回答你的问题:

  • 您可以使用res.render获取变量&amp;数据进入您的观点
  • 默认情况下,您不会在路径之间共享数据,但适用于所有用户的应用级数据除外,可以在app.locals上设置
  • 您可以使用像护照这样的身份验证中间件和快递会话等会话中间件来跟踪每个会话的路径中的用户信息。

希望这有帮助!祝快递好运!