【问题标题】:HTTP: One object per line in the response's bodyHTTP:响应正文中每行一个对象
【发布时间】:2018-09-17 11:42:41
【问题描述】:

我应该创建一个返回“响应正文中每行一个 JSON 对象”的 API,如下所示:

GET /somerequest

响应正文:

{"a": 1, "b": 2}
{"c": 1, "b": 3}
{"a": 4, "b": 2}
... 

我完全不知道如何干净地做到这一点。我应该在我的 res.send(...) 中输入什么? 我应该把我的对象变成字符串,用 '\n' 分隔它们,然后发回这个字符串吗?这听起来不太干净。

我对 Web 开发很陌生,如果答案很明显,请原谅我。

EDIT1:也许它被用作jsonlines 以获得更好的可读性和易于评估。

【问题讨论】:

  • “我应该把我的对象变成一个字符串,用 '\n' 分隔它们,然后发回这个字符串吗?” – 是的。另外,告诉制定 API 规范的人,他们是无能的小丑。
  • 我是不是误会了什么?它的字面意思是“GET /export 每行返回一个 JSON 对象”+ 上述示例
  • @JJJ 这种响应格式绝对没有问题。换行分隔的 JSON 是一种常用的东西,在处理大量记录时可以节省相当多的资源。
  • @Emilien 您正在用 Node.js 编写服务器?这些数据来自哪里?我会使用转换流并将其直接通过管道传输到res
  • @Emilien 在您查询数据的上下文中显示一些代码,以便我们为您提供一个很好的答案。

标签: javascript node.js http express


【解决方案1】:

事实证明这很容易做到,因为 http 响应是可写的。

这是一个使用 bolt 协议从 neo4j 数据库中读取数据的示例。

(res, query) => {
    res.writeHead(200, {
        'Content-Type': 'text/plain',
        'Transfer-Encoding': 'chunked',
        'Trailer': 'Content-MD5'
    });
    const session = driver.session()
    session
        .run(query)
        .subscribe({
            onNext: function (record) {
                const newObj = { "whatever": recod.get("something") }
                res.write(JSON.stringify(newObj) + '\n')
                },
            onCompleted: function () {
                res.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667'})
                res.end()
                session.close();
            },
            onError: function (error) {
                console.log(error);
                res.send({ success: false, message: error })
            }
        })
}

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 2020-12-24
    • 2018-11-27
    • 2017-04-17
    • 2011-08-09
    • 2018-06-25
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多