Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Express中显示每个请求的日志时间?_Javascript_Node.js_Datetime_Express_Momentjs - Fatal编程技术网

Javascript 在Express中显示每个请求的日志时间?

Javascript 在Express中显示每个请求的日志时间?,javascript,node.js,datetime,express,momentjs,Javascript,Node.js,Datetime,Express,Momentjs,我这里有些问题。我不知道为什么会这样。我将时间戳代码放在Moment.js库中,不仅放在该库中,最近我手动创建用于显示时间戳,但当我发送请求时,时间不会更新。 我把datetime放在我的文件路径中。但这是服务器文件中的工作 比如说 server.js routes/index.js var express=require('express')) var app=express() var router=express.router() var力矩=要求(‘力矩’) var timestamp

我这里有些问题。我不知道为什么会这样。我将时间戳代码放在Moment.js库中,不仅放在该库中,最近我手动创建用于显示时间戳,但当我发送请求时,时间不会更新。 我把datetime放在我的文件路径中。但这是服务器文件中的工作

比如说

server.js

routes/index.js

var express=require('express'))
var app=express()
var router=express.router()
var力矩=要求(‘力矩’)
var timestamps=moment().format('HH:mm:ss')
router.get('/',函数(req,res){
log(timestamps+'来自routes/index.js')
})
module.exports=路由
我第一次开始测试我的代码 获取本地主机: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中可以很好地使用

发生这种情况是因为函数外部的变量时间戳吗?但是当我在没有变量的情况下运行时,它是有效的。

为什么会发生这种情况?
谢谢

您可以缓存时间戳值

按以下方式修改路由文件:

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')
}

你在正确的轨道上!这是因为您在中间件*之外定义了
时间戳
。中间件是您注册到路由的函数,它会在与指定url匹配的每个请求上被调用。因此,当您在中间件中调用
moment()
时,它将返回请求的实际日期和时间,因为此函数仅在请求处理过程中执行。而在您的情况下,在函数外部定义了
时间戳
的代码只执行一次-当您需要
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

啊,我明白了,不管怎样,很好的解释。它工作+1谢谢:D
function(req, res){
  var timestamps = moment().format('HH:mm:ss')
  console.log(timestamps + ' From 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