我有快递服务器。
server.js
const express = require('express');
const app = express();
var json = require("./sample.js")
app.use("/", (req, res)=>{
console.log("----------->", JSON.stringify(json));
res.status(200).send(JSON.stringify(json));
});
app.listen(2222,()=>{
console.log(`Listening on port localhost:2222/ !`);
});
sample.js
var offer = {
"sample" : "Text",
"ting" : "Toing"
}
module.exports = offer ;
执行server.js文件后,它会从sample.js文件中获取json数据。如果我在server.js仍在执行时更新sample.js的数据,我就不会获得更新的数据。有什么办法吗? 在不停止执行server.js的情况下也这样做。
答案 0 :(得分:0)
您需要在运行时读取文件:
fs = require('fs');
function getJson() {
fs.readFile('sample.json', (err, jsonData) => {
if (err) {
console.log('error reading sample.js ', err)
}
return(jsonData)
}
}
}
确保你的sample.js只是一个json对象。
答案 1 :(得分:0)
同步:
var json = require('sample.js');
var obj = JSON.parse(json.readFileSync('file', 'utf8'));
异步:
var json = require('sample.js');
var obj;
json.readFile('file', 'utf8', function (err, data) {
if (err) throw err;
obj = JSON.parse(data);
});
答案 2 :(得分:0)
是的,有一种方法,你必须在每次发出请求时读取文件(或者将其缓存一段时间,以获得更好的性能)。
require
不起作用的原因是NodeJS会自动为您缓存模块。因此,即使您在请求处理程序中需要它(在use
中),它也不会起作用。
因为您无法使用require
,所以使用模块不方便(或高效)。所以你的文件应该是JSON格式:
{
"sample" : "Text",
"ting" : "Toing"
}
要阅读它,您必须使用fs
(文件系统)模块。这允许您每次都从磁盘读取文件:
const fs = require('fs');
app.get("/", (req, res) => {
// To read as a text file, you have to specify the correct
// encoding.
fs.readFile('./sample.json', 'utf8', (err, data) => {
// You should always specify the content type header,
// when you don't use 'res.json' for sending JSON.
res.set('Content-Type', 'application/json');
res.send(data)
})
});
重要的是要知道,现在data
是一个字符串,而不是一个对象。您需要JSON.parse()
来获取对象。
在这种情况下,不推荐使用use
。对于中间件,您应该考虑使用get
(如我的示例中所示),或all
如果您要处理任何动词。