Javascript 使用Node.js流式传输JSON
我被赋予了一项任务——我正在尝试使用just Node创建路由/端点,以便更好地演示Express封面下发生的事情。但我必须使用流 我有两条路线Javascript 使用Node.js流式传输JSON,javascript,node.js,routes,Javascript,Node.js,Routes,我被赋予了一项任务——我正在尝试使用just Node创建路由/端点,以便更好地演示Express封面下发生的事情。但我必须使用流 我有两条路线GET/songs和GET/refresh songs,要求如下: 我们需要以下两个端点: 获取/播放歌曲 获取/刷新歌曲 所有端点都应该返回带有正确头的JSON /歌曲应该 从src/data/songs.json文件流式传输数据 如果该文件或目录不存在,则不会使服务器崩溃 在这种情况下触发刷新代码的奖励点数 压缩响应的额外点数 /刷新歌曲应该 立即返
GET/songs
和GET/refresh songs
,要求如下:
我们需要以下两个端点:
获取/播放歌曲获取/刷新歌曲 所有端点都应该返回带有正确头的JSON /歌曲应该 从src/data/songs.json文件流式传输数据 如果该文件或目录不存在,则不会使服务器崩溃 在这种情况下触发刷新代码的奖励点数 压缩响应的额外点数 /刷新歌曲应该 立即返回 刷新歌曲时,它不应保留响应 返回带有状态JSON响应的202状态代码 继续从iTunes获取歌曲 前端应该有 触发此端点的UI/按钮 到目前为止,这就是我在
server.js
文件中的端点所在位置
const { createServer } = require('http');
const { parse: parseUrl } = require('url');
const { createGzip } = require('zlib');
const { songs, refreshSongs } = require('./songs');
const fs = require('fs');
const stream = fs.createReadStream('./src/data/songs.jso')
const PORT = 4000;
const server = createServer(({ headers, method, url }, res) => {
const baseResHeaders = {
// CORS stuff is gone. :(
'content-type' : 'application/json'
};
// Routing ¯\_(ツ)_ /¯
//
var path = url.parseUrl(url).pathname;
function onRequest(request, response){
response.writeHead(200, 'Content-Type': baseResHeaders['content-type']);
stream.on('data', function(err, data){
if (err) {
response.writeHead(404);
response.write('File not found');
refreshSongs();
} else {
response.write(createGzip(data))
}
response.end()
})
}
switch (path) {
case '/songs':
onRequest()
break;
case '/refresh-songs':
onRequest()
break;
}
server.on('listening', () => {
console.log(`Server running at http://localhost:${PORT}/`);
});
我想知道我是否正确地连接了我创建的
onRequest
方法,以及switch语句是否正确地拦截了那些URL的请指出问题所在;你期待什么,你得到什么,等等。。有一些关于如何创建一个好问题的好提示。@MikeMcCaughan谢谢我更新了我的问题!