Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js 如何使用Expressjs提供更新的Json文件?_Node.js_Json_Express - Fatal编程技术网

Node.js 如何使用Expressjs提供更新的Json文件?

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

我在json文件中存储单个对象数组。我让一个工人每隔一段时间调用一个api来更新json文件。json文件正从expressjs服务器提供给我的站点。然而,当调用api时,它会提供json文件的第一个版本,而不是最新的数据

我看到一些人提到,浏览器可能正在缓存文件,但是,当我在提供服务之前记录数组的长度时,它仍然具有原始长度

我还尝试在get函数中要求文件,认为可能是在读取文件时,但是没有任何更改

下面是一些代码:

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
<代码>等待仅在等待承诺时有用。