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(); } |
我正在得到回复,但它是一个空对象。我猜是因为在我的服务器文件中,
你为什么不把你要的文件发出去呢?
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')); }); |
但是如果你只想做你的代码,你需要在代码中包括的是
要读取文件,需要包含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