在Node js

时间:2018-06-12 17:34:23

标签: javascript node.js express

我有快递服务器。

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的情况下也这样做。

3 个答案:

答案 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如果您要处理任何动词。