私は単純なログイン フォームに取り組んでおり、ログイン (成功) した後、製品のリストを表示したいと考えています。ただし、ログイン フォーム自体はレンダリングされません。これが私が持っているものですapp.js
app.get ( '/users/new', routes.api.user.isLogged, routes.api.user.new );
このisLogged
メソッドは、セッションが存在するかどうかのみを示します。そこは問題ないようです。
私のuser.js
ファイルでは、新しい方法で、これは私が持っているものです:
exports.new = function(req, res) {
res.format({
html: function() {
return res.render('users/new', {title: 'Login'});
}
});
};
ためらうことなくレンダリングされることもあれば、次のようなエラーが表示されることもあります
domain.js:66
throw er;
^
Error: Can't render headers after they are sent to the client.
at ServerResponse.OutgoingMessage._renderHeaders (http.js:715:11)
at ServerResponse.res._renderHeaders (/Users/kaushik/dev/my_repos/retailer-catalog-backend/node_modules/kue/node_modules/express/node_modules/connect/lib/patch.js:76:25)
at ServerResponse.writeHead (http.js:1083:20)
at ServerResponse._implicitHeader (http.js:1040:8)
at ServerResponse.module.exports.res.write (/Users/kaushik/dev/my_repos/retailer-catalog-backend/node_modules/express/node_modules/connect/lib/middleware/compress.js:79:34)
at ondata (stream.js:38:26)
at EventEmitter.emit (events.js:96:17)
at ReadStream._emitData (fs.js:1368:10)
at afterRead (fs.js:1350:10)
at Object.wrapper [as oncomplete] (fs.js:362:17)
なぜこれが起こるのかよくわかりません。私はエクスプレスとノードが初めてです。
編集
isLogged
メソッドには:
exports.isLogged = function(req, res, next) {
if (req.session.user) {
res.redirect('/' + req.session.user.username + '/retailers')
} else{
return next();
};
};
これはapp.js
サーバー構成です。
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.compress());
app.use(express.methodOverride());
app.use(require('less-middleware')({ src: __dirname + '/routes/web/public' }));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: '5234523451' }));
app.use(validator);
app.use(app.router);
app.use(express.static(path.join(__dirname, 'routes', 'web', 'public')));
});