好吧,这是一个非常全面的问题,因为我需要了解流程和最佳实践。欢迎批评指正!
我正在为 PDF-to-image API
端点编写测试。因此,我需要将
PDF 发送到端点
。端点将其保存在本地、进行转换、将图像序列存储在 S3 存储桶中,然后发回 URL 数组。但是,由于我编写此测试主要是为了协助开发,所以这些都还没有发生。我只是想确保我可以在端点接收 PDF 并保存它。
查看下面的测试代码:
// testing dependencies
const chai = require("chai")
const chaiHttp = require("chai-http")
const should = chai.should()
const server = require('./../index.js')
chai.use(chaiHttp)
// utility dependencies
const fs = require('fs')
describe("PDF upload", () => {
it("should PUT my pdf", (done) => {
fs.readFile('./content/pdf/lockheed.pdf', (err, res) => {
if (err) { console.error(err) }
else {
chai.request(server)
.put('/v1/convert-pdf')
.set('Content-Type', 'application/pdf')
.send({ pdf: res })
.end((err, res) => {
console.log("got the res")
if (err) { console.error(err) }
else { console.log(res.body) }
done()
})
}
})
})
})
在设置 Content-Type
header 之前,我只需从服务器获取 413(请求太大)。我已经将所有超时和最大请求大小设置得很大,所以这真的不应该成为问题。但现在我在标题中有 application/pdf
,我收到此错误:
Uncaught TypeError: "string" must be a string, Buffer, or ArrayBuffer
这更有帮助,让我找到了这个 SO它将文件传送给请求。但是,我真的不确定如何通过 chai-http 来完成此操作,以便我的服务器可以成功获取 pdf 并将其保存到本地文件。
最佳答案
要通过chai-http
上传文件,请使用attach
而不是send
。这是一个例子:
describe("PDF upload", () => {
it("should PUT my pdf", (done) => {
chai.request(server)
.put('/v1/convert-pdf')
.set('Content-Type', 'application/pdf')
.attach('fileField', './content/pdf/lockheed.pdf', 'lockheed.pdf')
.end((err, res) => {
console.log("got the res");
if (err) {
console.error(err)
} else {
console.log('success');
console.log(res.body)
}
done();
});
})
})
实际上,chai-http
遵循与 SuperAgent
相同的 API。请查看document了解更多详情。
关于javascript - 如何使用 chai-http 放置 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42738218/