快速路由器方法调用和module.export方法调用和app.use()调用节点和expressjs之间的区别

时间:2018-02-20 04:14:55

标签: javascript node.js express callback routes

我有 app.js

var express = require('express');
var report = require('./routes/Report');

var app = express();

app.use('/api/appReport', report);

app.listen(3000);
module.exports = app;

我有 Report.js

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

var reportDb = require('../db/ReportDB');

reportDb.test(function(res) {
});

router.get('/all', function(req, resp) {
    reportDb.getAll(function(result) {
        resp.status(200);
        resp.send(result);
        return resp;
    });

}); 

我有 ReportDB.js

module.exports.test = function() {
    console.log('Hello');
}

module.exports.getAll = function (callback) {
    //Some operations
};

上面的代码工作正常。

我的问题是

当我启动节点js服务器时,它会自动调用Report.js中的reportDb.test(),但它不会自动调用Report.js中的router.get()。 所以我想知道调用test()和router.get()有什么区别?

我知道当我们点击' / all'然后它会调用router.get()。 但是对于reportDb.test(),我们不是在app.js中调用,那么它是如何在服务器启动时自动调用的?

如果我在Report.js中使用以下函数,请说。然后它不会exicute。

function test1() {
    console.log('hello...');
}

我想知道app.use()会自动调用导出的所有方法吗?

1 个答案:

答案 0 :(得分:0)

它的调用test()因为你写了

    reportDb.test(function(res) {

    });
在report.js中

并在其中包含reportDb.js。您还在app.js中包含了report.js.

    app.use('/api/appReport', report);

它不是调用test()

当你点击像localhost:3000 / all

这样的网址时,你的router.get()会调用