首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点路由模块访问其他模块功能

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

Stack Overflow用户
提问于 2014-08-24 10:12:41
回答 1查看 39关注 0票数 0

我试图使用一个模块来处理我的用户注册和登录过程。我想要做的是有一个模块,例如,一个“注册”端点,但是我不会把所有的代码都放在一个函数中,而是将它分割成单独的部分,比如validUsername、validPassword等等,以检查给定的值是否可以接受。

我遇到的麻烦是,每当这条路线运行时,我就会得到这样的错误:

TypeError: Object #没有方法“validUsername”

server.js

代码语言:javascript
复制
var user = require('./routes/user.js')(mongoose, bcrypt);

express.post('/user', user.create);

user.js

代码语言:javascript
复制
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函数在用作路由端点时仍然访问这些验证函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-24 13:11:05

修复方法是要么使用.bind()

代码语言:javascript
复制
express.post('/user', user.create.bind(user));

或者使用包装:

代码语言:javascript
复制
express.post('/user', function(req, res) { user.create(req, res); });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25470595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档