Request.js模拟文件上传(multipart / form-data)

时间:2016-12-19 13:53:36

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

我有一个express.js帖子功能,可以很好地接收和处理文件。

我尝试编写一个jasmine单元测试,使用fs&模拟同样的事情。 request

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或其他方式阅读文件有关?

1 个答案:

答案 0 :(得分: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()
});