var formData = {
name: 'TestDeck',
description: 'This is a test deck for my api',
private: false,
shareable: false,
ttsLanguages: [],
blacklistedSideIndices: [],
blacklistedQuestionTypes: [],
gradingModes: [],
imageAttribution: 'https://www.logogarden.com/wp-content/uploads/lg-index/Example-Logo-6.jpg',
imageFile: fs.readFile('retext.png', 'utf8')
}
function createDeck(connection) {
request.post({
url: '<url>',
formData: formData,
headers: {
'Content-Type': 'multipart/form-data'
},
json: true
}),
function(err, resp, body) {
}
}
我收到错误:TypeError:第一个参数必须是字符串或缓冲区。
老实说,我不知道为什么,需要帮助。
答案 0 :(得分:4)
代码中存在几个问题。
您得到TypeError: First argument must be a string or Buffer
因为您尝试在表单数据中发送布尔值false
- HTML表单不支持布尔值。在HTML中,选中复选框将发送其值,而未选中复选框则不会。
要解决此问题,您可以将false
更改为'FALSE'
(字符串)并在服务器端解析它。
fs.readFile('retext.png', 'utf8')
的使用不正确。要在表单中附加文件,正确的方法是:imageFile: fs.createReadStream('retext.png')
。
在formData: formData
中使用request.post(...)
时,HTTP请求的Content-Type
会自动multipart/form-data
,您不需要定义{再次{1}}标题。
此外,设置Content-Type
是不正确的,这会使json: true
成为Content-Type
。这种冲突会使application/json
模块混淆,并可能在某些JavaScript环境中引起问题。
回调函数request
应该是function(err, resp, body){...}
的一部分,可能是拼写错误。
总之,正确的代码如下:
request.post(...)