我在这里遇到了一些问题。我不知道为什么会这样。我把时间戳代码放在Moment.js库中,不仅仅是用于该库,最近我手动创建了显示时间戳,但是当我发送请求时,时间没有更新。 我把datetime放在我的文件路径中。但这是在服务器文件中工作。
所以例如
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
我第一次开始测试我的代码 获取localhost: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')
})
为什么会这样? 感谢
答案 0 :(得分: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 :(得分: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