2017-05-26 10 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のlocalhostのテストを開始: 8001/

午前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 

ナを示す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 

そして、第2の要求私のシステム時刻を示す私のシステム時間は、2番目の要求は、まだ最初のリクエストから既存のタイムログを取得しますこれはルートでのみ発生します。しかし、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 –

関連する問題