使用`Node.js`中的`require`传递对象和变量

时间:2015-10-18 15:30:33

标签: javascript node.js

我正在努力将路由方法从app.js移动到单独的文件。

我设法使用(在app.js中):

var userRoutes = require('./serverRoutes/userRoutes');
app.use('/userRoutes', userRoutes);
app.post('/user/login', userRoutes);

我可以看到路由正在完成。

我的app.js中有一些变量,如: - tokens阵列
- jwtSecretKey字符串
- jwt加密模块
- User这是mongoose schema

我想传递它们并通过userRoutes.js文件中的路由方法使它们可用。

我不知道怎么做。

另一个问题。

我也有一些'helper'类型的方法,我想在不同的'路由'文件中使用。

我不知道如何传递它们。

这就是我处理'路由'文件的方式:

var express = require('express');
var router = express.Router();

router.post('/user/login', function (request, response) {
    var email = request.body.email;
    var password = request.body.password;

    User.findOne({ email: email, password: password },
        function (err, user) {
            if (err)
                response.send(err);

            if (user) {
                var expires = new Date();

                expires.setDate((new Date()).getDate() + 5);

                var token = jwt.encode({
                    email: email,
                    expires: expires
                }, jwtTokenSecret);

                tokens.push(token);
                response.send(200, { access_token: token });
            } else {
                response.send(401, { message: "User not found" });

            }
        });
});

module.exports = router;  

谢谢: - )

1 个答案:

答案 0 :(得分:1)

我不确定"解决"你的标题的一部分与你的问题有关,但我可以回答你在问题中讨论的其余部分。

  

我的app.js中有一些变量...我想传递它们   通过userRoutes.js文件中的路由方法使它们可用。

与另一个模块共享某些设置的常用方法是在模块构造函数或模块方法中将它们传递给该模块:

var userRoutes = require('./serverRoutes/userRoutes')({
    tokens: tokens, 
    jwtSecretKey: jwtSecretKey, 
    jwt: jwt, 
    User: User
});

然后,在userRoutes模块中:

var express = require('express');
var router = express.Router();
var jwtSecretKey, jwt, User, tokens;

router.post('/user/login', function (request, response) {
    var email = request.body.email;
    var password = request.body.password;

    User.findOne({ email: email, password: password },
        function (err, user) {
            if (err)
                response.send(err);

            if (user) {
                var expires = new Date();

                expires.setDate((new Date()).getDate() + 5);

                var token = jwt.encode({
                    email: email,
                    expires: expires
                }, jwtSecretKey);

                tokens.push(token);
                response.send(200, { access_token: token });
            } else {
                response.send(401, { message: "User not found" });

            }
        });
});

// define module constructor
module.exports = function(options) {
    // save data shared from parent module
    jwtSecretKey = options.jwtSecretKey;
    jwt = options.jwt;
    User = options.User;
    tokens = options.tokens;
    return router;
};  
  

我也有一些帮手'我希望使用的类型方法   不同的路由'文件。我不知道如何通过它们。

分享一些常见帮助功能的常用方法是将它们放在自己的模块中,然后在该模块中只需要require()用于您需要使用它们的任何其他模块。