![](/img/trans.png)
[英]Allow other JavaScript functions (including from other files) to “hook” into my function
[英]Trying to include functions from other JavaScript files, TypeError that it's not a function
我正在尝试使我的代码更清晰,将其分离到其他文件中。 也就是说,我有一个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)
我特意试图遵循这个问题,但没有得到正确的结果。 有关如何包含其他JS文件的函数的任何帮助?
在您的顶级文件中,您正在导出一个函数 :
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){
您已定义为函数并调用为对象,您可以调用函数如下
var UsersController = require('../user/UsersController.js')();
或定义为对象
var User = require('../user/User');
module.exports = {
this.verifyNoExistingUser = function verifyNoExistingUser(email, name){
}
};
为什么你不简单地写:
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)
你可以这样做:
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,
}
尝试
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;
});
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.