我试图使用一个模块来处理我的用户注册和登录过程。我想要做的是有一个模块,例如,一个“注册”端点,但是我不会把所有的代码都放在一个函数中,而是将它分割成单独的部分,比如validUsername、validPassword等等,以检查给定的值是否可以接受。
我遇到的麻烦是,每当这条路线运行时,我就会得到这样的错误:
TypeError: Object #没有方法“validUsername”
server.js
var user = require('./routes/user.js')(mongoose, bcrypt);
express.post('/user', user.create);user.js
module.exports = function(mongoose, bcrypt){
return {
validUsername: function(username){
// Ensure a username is present
if(username == null){
return false;
}
// Ensure it is at least 2 characters
if(username.length <= 2){
return false;
}
return true;
},
validPassword: function(password){
// Ensure a password is present
if(password == null){
return false;
}
// Ensure it is at least 9 characters
if(password.length < 9){
return false;
}
return true;
},
create: function(req, res){
// Extract the new user data from the post body
var username = req.body.username || null;
var password = req.body.password || null;
// Ensure the details are acceptable
if(!this.validUsername(username))
{
res.send(400,{'field':'username','error':'invalid'});
}
else if(!this.validPassword(password))
{
res.send(400,{'field':'password','error':'invalid'});
}
else
{
// ... Create new user etc ...
}
}
};
};我假设错误的原因是因为在设置路由时,只有'create‘函数被传入,因此它无法在同一个模块中“看到”其余的函数。
那么,如何解决这个问题,并让create函数在用作路由端点时仍然访问这些验证函数?
发布于 2014-08-24 13:11:05
修复方法是要么使用.bind()
express.post('/user', user.create.bind(user));或者使用包装:
express.post('/user', function(req, res) { user.create(req, res); });https://stackoverflow.com/questions/25470595
复制相似问题