【问题标题】:Error: Not ready to parse. Missing Content-Type?错误:尚未准备好解析。缺少内容类型?
【发布时间】:2014-04-17 09:41:50
【问题描述】:

我正在使用 curl 驱动一个 node.js/express.js 应用程序。卷曲命令: curl -X PUT -i -T LICENSE.txt localhost:9981/v1/test/bucket/some-object -s

错误,说内容类型应该存在。 'text/plain' 的内容类型不起作用。事实上,唯一有效的内容类型似乎是:Content-Type: multipart/form-data; boundary=---something

但是!如果我只放一些文本文件,边界应该是什么? curl 命令挂起,因为我认为边界无法弥补。

现在,这个 curl 命令有效:curl localhost:9981/v1/test/container/some-object -X PUT -F "file=@/opt/nedge/README.md" 但这不是我想要的,因为我不想指定 file=@

最后一个问题是正在运行的 node.js 代码。就是busboy的例子,第一个来自他们github的例子:https://github.com/piousbox/busboy

我的问题是:如何使用 curl 指定正确的边界,或者如何使 busboy(或整体 node.js 流)接受 multipart/form-data 以外的内容类型。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    Busboy 仅处理 multipart/form-data(通常当至少有一个字段是文件时)或 application/x-www-form-urlencoded 请求(无文件)。如果您需要处理“文本/纯文本”或其他类型的请求,则只需在常规表单处理中间件之前添加您自己的中间件。可能是这样的:

    // ....
    
    app.use(function(req, res, next) {
      if (!req.headers['content-type'])
        return next(new Error('Bad request'));
      if (req.headers['content-type'].indexOf('text/plain') === 0) {
        // read from `req` here with req.read() or req.on('data', ...), etc.
      } else
        next();
    });
    
    // ....
    

    【讨论】:

    • 这和说“不要使用busboy使用普通旧快递请求的流API”是一样的吗?
    • 如果您期待非表单提交,那么是的,您必须自己处理请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2016-01-24
    • 1970-01-01
    • 2022-07-20
    • 2017-12-19
    • 1970-01-01
    • 2019-08-14
    相关资源
    最近更新 更多