Node.js 如何使用Expressjs提供更新的Json文件?
我在json文件中存储单个对象数组。我让一个工人每隔一段时间调用一个api来更新json文件。json文件正从expressjs服务器提供给我的站点。然而,当调用api时,它会提供json文件的第一个版本,而不是最新的数据 我看到一些人提到,浏览器可能正在缓存文件,但是,当我在提供服务之前记录数组的长度时,它仍然具有原始长度 我还尝试在get函数中要求文件,认为可能是在读取文件时,但是没有任何更改 下面是一些代码:Node.js 如何使用Expressjs提供更新的Json文件?,node.js,json,express,Node.js,Json,Express,我在json文件中存储单个对象数组。我让一个工人每隔一段时间调用一个api来更新json文件。json文件正从expressjs服务器提供给我的站点。然而,当调用api时,它会提供json文件的第一个版本,而不是最新的数据 我看到一些人提到,浏览器可能正在缓存文件,但是,当我在提供服务之前记录数组的长度时,它仍然具有原始长度 我还尝试在get函数中要求文件,认为可能是在读取文件时,但是没有任何更改 下面是一些代码: const express = require('express') const
const express = require('express')
const app = express()
const port = 3001
let jobData = require('/exampleFile')
app.get('/jobs', async (req, res) => {
let data = await jobData;
console.log(data.length)
await res.header('Access-Control-Allow-Origin', 'http://localhost:3000')
res.set('Cache-Control', 'no-store, no-cache, must-revalidate, private')
return await res.send(data)}
)
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
我只是在写问题的时候找到了一个解决办法。我将文件的读取方式更改为使用fs模块,而不是使用require:
const jobData = await JSON.parse(fs.readFileSync('/exampleFile', 'utf8'));
使用require可以,但您的路径不是,它应该是
require('./exampleFile')
为什么您要等待一切?我使用的路径是查找文件,只是在文件更新后没有给出新结果。起初,文件是空的,所以我在所有内容上都添加了waits,然后它就通过了。去掉那里的waitt
。它没有做任何有用的事情,因为这行代码中没有任何承诺。如果这是一台服务器,您应该使用fs.readFile()
,而不是fs.readFileSync()
。在nodejs的最新版本中,可以使用constjobdata=JSON.parse(等待fs.promises.readFile('/exampleFile',utf8')
您使用的是readFile()
的承诺版本,然后在该承诺上使用wait
<代码>等待仅在等待承诺时有用。