【问题标题】:Request.js Simulate a File Upload (multipart/form-data)Request.js 模拟文件上传(multipart/form-data)
【发布时间】:2016-12-19 13:53:36
【问题描述】:

我有一个express.js post 函数,可以很好地接收和处理文件。

我正在尝试编写一个jasmine 单元测试,它使用fsrequest 模拟相同的事情。

const request = require("request")
const fs = require("fs")
const app = require("../app.js")
const base_url = "http://localhost:3002/"

var wordFile = fs.readFileSync(__dirname + '/test.docx', 'utf8')

describe("POST a word file to /word", function() {
  it("parses the word file, and returns an array of components", function(done) {
    request({
      url: base_url + "word",
      method: "POST",
      json: true,
      headers: {
        "content-type": "multipart/form-data",
      },
      body: wordFile
    }, function (error, response, body) {
         expect(response.statusCode).toBe(200)
         done()
       }
    )
  })
})

我收到 500 错误,但是当我在我的应用程序上使用以下上传视图时,它可以正常工作:

<form action="/mediaDev/word" method="post" enctype="multipart/form-data">
    <input type="file" name='doc' placeholder="Select file"/>
    <br/>
    <button>Upload</button>
</form>

这个问题是否与我以 utf8 格式读取文件或其他原因有关?

【问题讨论】:

    标签: javascript node.js jasmine http-post httprequest


    【解决方案1】:

    在您的表单中,您发布到/mediaDev/word,而在您的测试中,您仅发布到/word。检查这是正确的。

    您也没有关注request.js documented examples for sending multipart form data,对于您的情况,它看起来像这样:

    var formData = {
      doc: fs.createReadStream(__dirname + '/test.docx', {encoding:'utf8'})
    }
    
    request.post({url: base_url + "word", formData: formData}, function(error, repsonse, body) {
      expect(response.statusCode).toBe(200)
      done()
    });
    

    【讨论】:

    • 谢谢,但这只是与 nginx 路由有关,端点似乎是正确的。根据您发布的内容,我得到 404 而不是 500。
    • 好的 - 然后改回 URL 并尝试我建议的代码更改 - 会发生什么?
    • 好吧抱歉没注意到有其他建议可以试试。
    • 很抱歉,这让我更接近了(我会再次投票,投票次数过多)但我只是认为它有效,因为我没有在帖子回复中记录错误.当我记录错误时,我得到“错误:套接字挂起”。很抱歉在完全检查它是否有效之前将其标记为已回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2016-01-27
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多