【问题标题】:node JS express framework sendFile("home.html",{context?})node JS express 框架 sendFile("home.html",{context?})
【发布时间】:2018-08-28 17:20:47
【问题描述】:

我正在阅读 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} 这样的数据选项。路由之间应该如何传递数据?

【问题讨论】:

  • “发送上下文”是什么意思?您可以使用服务器端会话(参见 express-session),或者如果您想为给定浏览器的请求添加一些状态,您可以设置一个 cookie 并将一些数据放入 cookie。
  • 对于仅下一个请求的临时状态,您还可以重定向到包含查询参数的 URL。

标签: node.js express render sendfile


【解决方案1】:

通常要使用 express 处理登录,您会使用 passport's local strategy 之类的东西,它将用户对象附加到每个路由的请求对象 (req.user)。我不知道您正在尝试的内容是否会在更大的环境中起作用-您至少需要某种基于会话的中间件,例如express-session,因此您可以在每个会话中附加变量(我认为它给你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 将变量和数据放入您的视图中
  • 默认情况下,您不会跨路由共享数据,但适用于所有用户的应用级数据除外,可以在app.locals 上设置
  • 您可以使用身份验证中间件(如护照)和会话中间件(如 express-session)来跟踪每个会话中跨路由的用户信息。

希望这会有所帮助!祝你好运!

【讨论】:

    猜你喜欢
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2014-01-24
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多