关于node.js:如何使用express.js向本地json文件发出GET请求?

How to make GET request with express.js to a local json file?

我想用express向本地JSON文件发出get请求。

在我的server.js中我有这个

1
2
3
4
5
6
7
8
9
var data = {};
app.get('/src/assets/data.json', (req, res) => {
  console.log(res)
  res.writeHead(200, {
    'Content-type': 'application/json'
  });

  res.end(JSON.stringify(data));
});

data.json看起来像这样

1
2
3
4
5
[{
   "param":"one",
   "param":"two",
   "param":"three"
  }]

另外,我还为get请求创建了一个函数,在加载dom时立即调用该函数。

1
2
3
4
5
6
7
8
9
10
getData() {
    let xhr = new XMLHttpRequest();
    xhr.open('GET', '/src/assets/data.json', true);
    xhr.onreadystatechange = () => {
      if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
        console.log(xhr)
      }
    };
    xhr.send();
  }

我正在得到回复,但它是一个空对象。我猜是因为在我的服务器文件中,var data = {};是空的,但我不确定该怎么处理它?


你为什么不把你要的文件发出去呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
var data = {};
app.get('/src/assets/data.json', (req, res) => {
  console.log(res)

  /* Insted of doing all this */
  // res.writeHead(200, {
  //    'Content-type': 'application/json'
  // });
  // res.end(JSON.stringify(data));

  /* Just send the file */
  res.sendFile(path.join(__dirname, '/src/assets', 'data.json'));
});

但是如果你只想做你的代码,你需要在代码中包括的是

  • 读取data.json文件。
  • 将文件中的所有数据放入对象,即data变量。
  • 要读取文件,需要包含node.js的文件系统模块

    同步:

    1
    2
    var fs = require('fs'); /* Put it where other modules included */
    var data = JSON.parse(fs.readFileSync('/src/assets/data.json', 'utf8')); /* Inside the get function */

    Async:

    1
    2
    3
    4
    5
    6
    var fs = require('fs');
    var data;
    fs.readFile('/src/assets/data.json', 'utf8', function (err, data) {
      if (err) throw err;
      data = JSON.parse(data);
    });

    在应用代码之前,请阅读官方文档,也可以随意查看节点文件系统上的其他示例。

    来源:这里


    您可以创建本地REST服务器并通过以下方式返回保存在一个文件中的JSON格式:

    文件App.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    'use strict'

    var http = require('http');
    var url = require('url');
    var fs = require('fs');
    var path = require('path');

    http.createServer((request, response) => {
      let urlInfo = url.parse(request.url, true); // host, pathname, search
      let method = request.method;

      if (method == 'GET') {
          console.log(urlInfo.pathname);
         if (urlInfo.pathname.includes('request1') ) {
            sendResponse('./request1.txt',response)

        }
      } else {
        sendResponse("","")
      }
    }).listen(3000,"192.168.0.1");       // change your local host here
    console.log("Start server at port 3000");

    function sendResponse(filename,response) {
        var sampleTxt = path.join(__dirname, filename);
        console.log(filename);
        fs.readFile(sampleTxt, function(error, data) {
          if (error) return console.error(error);
            response.writeHead(200, {'Content-Type': 'application/json;charset=UTF-8', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'POST, GET, PUT, DELETE, OPTIONS',"Access-Control-Allow-Headers":"If-Modified-Since"});
            response.write(data);
            response.end();
         
        });
    }

    在文件request1.txt中=>根据需要保存响应格式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [
      {
       "uuid":"id1",
       "userId": 80778,
       "mac":"mac1",
       "name":"Living & Dining Room"
      },
      {
       "uuid":"id2",
       "userId": 80778,
       "mac":"mac2",
       "name":"Bed Room"
      },
      {
       "uuid":"id3",
       "userId": 80778,
       "mac":"mac3",
       "name":"Kitchen"
      }
    ]

    运行App.js