javascript - 使用 Node.js 流式传输 JSON
问题描述
我被分配了一项任务——我正在尝试仅使用 Node 来制作路由/端点,以更好地展示 Express 幕后发生的事情。但我必须使用流。
我有两条路线GET /songs
,并GET/refresh-songs
具有以下要求:
我们需要以下两个端点:
获取 /songs
获取 /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
解决方案
推荐阅读
- python - Django POST 验证字段消失(NOT NULL 约束失败)
- rxjs - RxJS:可观察对象之间的可重复竞赛
- android - Android App 中的 VPN 是否会从 Chromebook 上的 Chrome 传输网络流量?
- amazon-web-services - 从 AWS CDK 堆栈中获取所有节点
- python - 如何从 DeepDiff 中删除特定单词?
- java - 有没有更好的方法来处理双打的数学计算?
- java - 反应流中不一致的 doAfterTerminate 行为
- c# - 无法批量加载。文件“C:\CSV\Alarm.csv”不存在或您没有文件访问权限。-- SQL Server
- java - 禁用自定义健康检查端点
- python - Google Colab 不会运行所有一个单元格