2017-03-19 42 views
0

這是我的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似乎沒有運行。

+0

'security.js'中的函數後面的右括號是什麼? – Bergi

+0

你有什麼錯誤嗎? – Bergi

回答

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()處理程序,這絕不是您想要執行的操作。你不解釋你想要用這個代碼做什麼,所以我不能推薦正確的代碼,但是這個代碼顯然是錯誤的。

0

你錯過了回調。請用下面的文件替換security.js文件。

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