将express()app变量从一个文件传递到另一个文件

时间:2016-04-15 19:17:15

标签: javascript node.js express

大家好,首先,我知道这里有很多类似的帖子,但不幸的是我仍然无法弄清楚我的麻烦。

我有一个文件 server.js ,我在其中声明我的app变量并调用一些配置内容:

var app = express();
...

在路径 ./ server / routes / PostApi.js 的我的其他文件中,我需要调用这样的代码:

app.get('/api/posts', function(req, res) {
// use mongoose to get all posts in the database
Post.find(function(err, posts) {
    // if there is an error retrieving, send the error. nothing after res.send(err) will execute
    if (err) {
        res.send(err);
    }
    res.json(posts); // return all posts in JSON format
}); 
...

在这个文件的末尾我打电话:

module.exports = PostApi;
首先提到的server.js中需要

var PostApi = require('./server/routes/PostApi');

请问,这些天将app变量传递给我的api文件的最佳做法是什么?谢谢!

3 个答案:

答案 0 :(得分:1)

因此,直接回答您的问题是您可以将路线代码转换为接受应用程序作为参数的函数:

module.exports = function(app){

   app.get('/api/posts', function(req, res) {
   // use mongoose to get all posts in the database
   Post.find(function(err, posts) {
       // if there is an error retrieving, send the error. nothing after       res.send(err) will execute
       if (err) {
           res.send(err);
       }
       res.json(posts); // return all posts in JSON format
   }); 
   ...
};

这就是说,人们常常在他们的路线中建立一个路由器并将其导出,然后让应用程序需要并使用:

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

    router.get(''/api/posts', function(req, res) {
           // use mongoose to get all posts in the database
       Post.find(function(err, posts) {
           // if there is an error retrieving, send the error. nothing after       res.send(err) will execute
           if (err) {
               res.send(err);
           }
           res.json(posts); // return all posts in JSON format
       });

module.exports = router;

//在app.js

...
app.use(require('./myrouter.js'));

答案 1 :(得分:0)

保罗的回答是正确的,但如果您的文件没有太多变化,您可以这样做。

module.exports = function(app){

   app.get('/api/posts', function(req, res) {
   ....
   }); 
};
app.js中的

var PostApi = require('./server/routes/PostApi')(app);

答案 2 :(得分:0)

这对我有用:

index.js

var express = require('express'); // include
var moduleA = require('./moduleA'); // include

var app = express();
var moduleA = new moduleA();

moduleA.execute(app);

app.listen(process.env.PORT || 8080);

moduleA.js

function moduleA() {
}

moduleA.prototype.execute = function(app) {
    // publish endpoints
    app.get('/register',
        function(req, res)
        {
            res.type('text/plain');
            res.send('Hello world express!!');
        }
    );
};


module.exports = moduleA;

用以下方法测试:

http://localhost:8080/register