为什么不打印此模块

时间:2017-03-19 06:05:06

标签: javascript node.js

这是我的app.js:

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

var someroute = require('./someroute')(router);


app.use('/api/someroute', someroute );


app.listen(3000, function () {
  console.log('Server listening on port 3000!')
});

这是我的someroute.js:

module.exports = function(router) {
    var security = require('../../lib/security');

    router.post("/", function(req, res, next) {

         console.log('THIS IS PRINTING');

         security.security_function(function(err,result){
         console.log('THIS IS NOT PRINTING');
          });
    });
    //error handler
    router.use(function(err, req, res, next) {
        res.status(500).json(JSON.stringify({
            error: err
        }));
    });
    return router;
}

这是我的security.js文件:

exports.security_function= function() {
    console.log("THIS IS NOT PRINTING EITHER");
});

当我调用/ api / sameroute url时它会命中路径,因为我可以看到第一个console.log正在打印,但是当我希望security_function打印时,什么都没有打印出来。然后这个函数带回来的结果我也想要它打印,但它显然不是打印,因为security_function似乎甚至没有运行。

2 个答案:

答案 0 :(得分:1)

你的代码很混乱。您已将security_function定义为不带参数的函数。它应该简单地称为security.security_function(),如下所示:

module.exports = function(router) {
    var security = require('../../lib/security');

    router.post("/", function(req, res, next) {

         console.log('THIS IS PRINTING');

         // call the security function here
         security.security_function();
    });
    //error handler
    router.use(function(err, req, res, next) {
        res.status(500).json(JSON.stringify({
            error: err
        }));
    });
    return router;
}

然后,此外,您没有正确使用路由器。你在做:

app.use('/api/someroute', someroute );
此类代码中的

someroute应该是路由器,或者应该是中间件功能。这不是你的情况。你将它作为router.post()的函数。那是非常错的。每次调用中间件时,这将注册一个新的router.post()处理程序,这绝不是您想要做的。您没有解释您尝试使用此代码执行的操作,因此我无法推荐正确的代码,但此代码显然是错误的。

答案 1 :(得分:0)

你错过了回调。请替换下面的security.js文件。

exports.security_function= function(cb) { console.log("THIS IS NOT PRINTING EITHER"); cb(); };