我正在努力使我的代码更清晰,将其分离到其他文件中。也就是说,我有一个UsersController.js,它将在Users数据库上执行功能。现在只有一个功能......
var User = require('../user/User');
module.exports = function(){
this.verifyNoExistingUser = function verifyNoExistingUser(email, name){
//check if email is taken
User.findOne({email: email}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
//check if username is taken
User.findOne({name: name}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
return true;
}
});
}
return false;
});
}
};
然后当我在我的app.js中使用它时,就像这样......
var express = require('express');
var router = express.Router();
...
var UsersController = require('../user/UsersController.js');
...
router.post('/register', function(req, res){
var hashedPassword = bcrypt.hashSync(req.body.password, 8);
if(!UsersController.verifyNoExistingUser(req.body.email, req.body.name)){
console.log(val);
return res.status(500).send("Username or email already exists.");
}
我发现我的功能不是功能。当我打电话给...
UsersController.verifyNoExistingUser(req.body.email, req.body.name)
我特意尝试遵循此SO question但未获得正确的结果。有关如何包含其他JS文件的函数的任何帮助?
答案 0 :(得分:2)
在您的热门文件中,您正在导出功能:
module.exports = function(){
在您的底层文件中,您要导入该功能:
var UsersController = require('../user/UsersController.js');
并尝试访问一个属性:
if(!UsersController.verifyNoExistingUser...
当然不存在。分配给函数内部的this
并不会分配给函数的属性本身,即使它已经分配,也必须先运行该函数才能分配属性。
如果你想这样使用它,你应该导出一个对象:
var User = require('../user/User');
module.exports = {
verifyNoExistingUser: function verifyNoExistingUser(email, name){
//check if email is taken
User.findOne({email: email}, function(err, user){
// ...
但如果verifyNoExistingUser
是您要导出的唯一功能,那么为什么不直接导出它,而不是导出对象?
module.exports = function verifyNoExistingUser(email, name){
答案 1 :(得分:1)
您已定义为函数并调用为对象,您可以调用函数如下
var UsersController = require('../user/UsersController.js')();
或定义为对象
var User = require('../user/User');
module.exports = {
this.verifyNoExistingUser = function verifyNoExistingUser(email, name){
}
};
答案 2 :(得分:0)
为什么你不写简单:
module.exports = (email, name){
//check if email is taken
User.findOne({email: email}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
//check if username is taken
User.findOne({name: name}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
return true;
}
});
}
return false;
});
};
然后在另一个文件中:
var verifyNoExistingUser = require('../user/UsersController.js');
(您可以将UsersController.js重命名为verifyNoExistingUser.js
并称之为:
verifyNoExistingUser(req.body.email, req.body.name)
答案 3 :(得分:0)
您可以这样做:
var User = require('../user/User');
function verifyNoExistingUser(email, name){
//check if email is taken
User.findOne({email: email}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
//check if username is taken
User.findOne({name: name}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
return true;
}
});
}
return false;
});
}
module.exports = {
verifyNoExistingUser,
}
答案 4 :(得分:0)
尝试
module.exports = {
verifyNoExistingUser: function (email, name){
//check if email is taken
User.findOne({email: email}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
//check if username is taken
User.findOne({name: name}, function(err, user){
if(err){
return res.status(500).send('Error on the server.');
}
if(!user){
return true;
}
});
}
return false;
});
}
};