Javascript 路由器中的呼叫中间件功能

Javascript 路由器中的呼叫中间件功能,javascript,node.js,express,couchdb,middleware,Javascript,Node.js,Express,Couchdb,Middleware,我正在使用在我的express.js应用程序上实现会话,我需要一些帮助。我在router.js中有我的post和gest请求,在app.js中有中间件,当我运行它时会出现以下错误: ReferenceError:未定义requireLogin //index.js(路由器) var express=require('express')) ,router=express.router() ,user=require('../public/js/models/test.js'); get('/pro

我正在使用在我的express.js应用程序上实现会话,我需要一些帮助。我在router.js中有我的post和gest请求,在app.js中有中间件,当我运行它时会出现以下错误:

ReferenceError:未定义requireLogin

//index.js(路由器)
var express=require('express'))
,router=express.router()
,user=require('../public/js/models/test.js');
get('/profile header',requireLogin,函数(req,res,html){
控制台日志(请求会话);
res.render('templates/profile header.jade',{title:'Default'})
});
get('/sign-in',函数(req、res、html){
res.render('templates/sign-in.jade',{title:'sign-in'})
});
get('/blog home',requireLogin,函数(req,res,html){
res.render('templates/blog home.jade',{title:'blog'})
});
路由器.get('/logout',函数(req,res){
req.session.reset();
res.redirect('/');
});
router.post('/profile header',函数(req、res、html){
用户登录(请求主体、函数(e、o){
如果(o){
//添加会话
req.session.user=o;
res.redirect('/profile header');
}否则{
res.render('templates/sign-in.jade',{error:'Invalid email或password.'});
}
});
});

module.exports=路由器
问题是
requireLogin
app.js
中定义,但在
index.js
中没有定义。 我建议在外部服务中移动
requireLogin
,并在需要时导入/要求它:

// auth.service.js
exports.requireLogin = function (req, res, next) { ... };
然后在
index.js
中添加以下内容:

var Auth = require('./auth.service');

....

router.get('/profile-header', Auth.requireLogin, function (req, res, html) {
  console.log(req.session);
  res.render('templates/profile-header.jade', { title: 'Default' })
});

好的thx,我不需要在app.js-tho中调用它?它唯一正常工作的时候是当函数和所有get/post都在app.js中时,正如我从您的代码中看到的,您没有在
app.js中调用它。刚刚在那里申报的。因此,如果您将其移动到外部服务,您可以将其从
app.js
中删除。好的,我仍然有一个问题,当我注册时,我的请求很好,我得到了我的用户信息,但随后它在登录页面上被requireLogin重定向(如果登录成功,它也不会被重定向),我不明白原因。。非常感谢你帮助我!如果没有用户连接到
req
对象,它将重定向。登录后可能没有将
user
添加到
req
中?如果(user)
,则存在一个条件
。可能它找不到用户,因此不将其添加到
req