gpt4 book ai didi

node.js - 如何将 session 传递到 Node/Express 中的 View 中?

转载 作者:搜寻专家 更新时间:2023-11-01 00:18:54 25 4
gpt4 key购买 nike

我正在玩弄 Node/Express 3.0。但我不确定如何退出 session 。特别是我不确定我在 routes/session.js 中是否正确处理了以下内容。

app.use(function(req, res, next) {
res.locals.session = req.session;
next();
});

以下是更多的细节。

我在 app.js 中有这个

var express = require('express')
, routes = require('./routes')
, http = require('http')
, path = require('path')
;

var app = express();

app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('testtest'));
app.use(express.session({
secret: 'testtest',
maxAge: 3600000
}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
...
require ('./routes/session')(app);
...
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});

在 routes/session.js 中

module.exports = function(app) {

app.use(function(req, res, next) {
res.locals.session = req.session;
next();
});

app.get('/session/new', function(req, res) {
res.render('session/new', {title: "Log in"});
});

app.post('/session', function(req, res) {
if (users[req.body.username] &&
users[req.body.username].password === req.body.password) {
req.session.user = users[req.body.username];
res.redirect('/users');
} else {
res.redirect('/session/new')
}
});

app.del('/session', function(req, res, next) {
req.session.destroy();
res.redirect('/users');
});

};

我有这个想法。

- if (session.user) {

p
span Hello 
span= session.user.name
span= session
span !
p
form(method="POST", action="/session")
input(type="hidden", name="_method", value="DELETE")
input(type="submit", value="Log out")

- } else {

p
a(href="/session/new") Login
span  or 
a(href="/users/new") Register

- }

但这不会获取 session 并给出错误。

1| > 2| - if (session.user) { 3| 4| p 5| span Hello  session is not defined

最佳答案

为了使中间件方法起作用,您需要确保安装中间件的 app.use 调用在调用 app.use(app.router);。目前你在通过 require('./routes/session')(app); 调用之后调用它:

require ('./routes/session')(app);
app.use(app.router);

要在没有中间件的情况下执行此操作,请更改您的 res.render 调用以传入您希望 View 可用的本地 session 变量:

app.get('/session/new', function(req, res) {
res.render('session/new', {title: "Log in", session: req.session});
});

关于node.js - 如何将 session 传递到 Node/Express 中的 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com