2017-05-26 22 views
2

我在這裏有一些問題。我不知道爲什麼會發生這種情況。我把時間戳代碼與Moment.js庫,不僅與該庫,最近我手動創建顯示時間戳,但當我發送請求,時間沒有更新。 我把datetime放在我的文件路徑中。但是這是在服務器文件中的工作。在Express中顯示每個請求的日誌時間?

因此,例如

server.js

var express = require('express') 
var app = express() 
var moment = require('moment') 

app.use(function(req, res, next){ 
    console.log(moment().format('HH:mm:ss') + ' From server.js') //Showing time now 
    next(); 
    }) 

app.use('/', index) 
app.listen(8001) 

路線/ index.js

var express = require('express') 
var app = express() 
var router = express.Router() 
var moment = require('moment') 
var timestamps = moment().format('HH:mm:ss') 

router.get('/', function(req, res){ 
    console.log(timestamps + ' From routes/index.js') 
}) 

module.exports = routes 

而且我開始測試我的第一次 GET本地主機的代碼: 8001/

顯示16點20分51秒

[nodemon] 1.11.0 
[nodemon] to restart at any time, enter `rs` 
[nodemon] watching: *.* 
[nodemon] starting `node ./bin/www` 
16:20:51 From Server.js 
16:20:51 From routes/index.js 

和第二請求我的系統時間,我的系統時間顯示16點22分52秒

[nodemon] 1.11.0 
[nodemon] to restart at any time, enter `rs` 
[nodemon] watching: *.* 
[nodemon] starting `node ./bin/www` 
16:22:52 From Server.js 
16:20:51 From routes/index.js 

不,第二個請求仍然得到來自第一次請求現有的時間日誌,這隻發生在路線上。但在server.js中工作良好

是否發生這種情況是因爲函數外可變的時間戳?但是,當我沒有變量運行,它的工作。

router.get('/', function(req, res){ 
    console.log(moment().format('HH:mm:ss') + ' From routes/index.js') 
}) 

爲什麼這是可以發生的事情? 謝謝

回答

2

您緩存時間戳值。

修改你的路由文件是這樣的:

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

router.get('/', function(req, res){ 
    var timestamps = moment().format('HH:mm:ss') 
    console.log(timestamps + ' From routes/index.js') 
}) 

module.exports = routes 

你要明白,一旦文件的應用程序開始,直到它運行的是包括在內。唯一的部分不時被調用,這裏是路線的功能處理程序:

function(req, res){ 
    var timestamps = moment().format('HH:mm:ss') 
    console.log(timestamps + ' From routes/index.js') 
} 
1

您在正確的軌道上!這是因爲您在中間件*之外定義了timestamps。中間件是您註冊到路由的功能,它會在每個匹配指定url的請求上被調用。因此,當您在中間件內調用moment()時,它會返回請求的實際日期和時間,因爲此功能僅在請求處理期間執行。在你的情況下,在函數外部定義的timestamps的代碼只執行一次 - 在應用程序啓動時,當你需要routes/index.js時。 但你仍然可以使用變量,只是把它定義在正確的地方:

var express = require('express') 
var app = express() 
var router = express.Router() 
var moment = require('moment') 
var format = 'HH:mm:ss'; 

router.get('/', function(req, res){ 
    var timestamps = moment().format(format) 
    console.log(timestamps + ' From routes/index.js') 
}) 

module.exports = routes 
+0

啊我明白了,反正很好的解釋。它工作+1 謝謝:D –

相關問題