Javascript 节点路由模块访问其他模块功能

Javascript 节点路由模块访问其他模块功能,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试使用一个模块来处理我的用户注册和登录过程。我想做的是有一个模块,例如,一个寄存器端点,但不是把所有的代码放在一个函数中,我会把它分成不同的部分,如validUsername、validPassword等,以检查给定的值是否可以接受 我遇到的问题是,每当运行此路由时,都会出现以下错误: TypeError:对象没有方法“validUsername” server.js user.js 我假设出现错误的原因是,在设置路由时,只传入“create”函数,因此无法看到同一模块中的其余函数 那么

我正在尝试使用一个模块来处理我的用户注册和登录过程。我想做的是有一个模块,例如,一个寄存器端点,但不是把所有的代码放在一个函数中,我会把它分成不同的部分,如validUsername、validPassword等,以检查给定的值是否可以接受

我遇到的问题是,每当运行此路由时,都会出现以下错误:

TypeError:对象没有方法“validUsername”

server.js

user.js

我假设出现错误的原因是,在设置路由时,只传入“create”函数,因此无法看到同一模块中的其余函数

那么,我如何解决这个问题,并使create函数在用作路由端点时仍能访问这些验证函数呢?

修复方法是使用。绑定:

或使用包装器:

express.post('/user', function(req, res) { user.create(req, res); });

谢谢最初,我使用var解决了它,而不是立即返回,然后引用它。不过,我现在使用bind,这似乎是一个更好的解决方案。
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 ...
            }
        }
    };
};
express.post('/user', user.create.bind(user));
express.post('/user', function(req, res) { user.create(req, res); });