javascript - 类型错误 : First argument must be a string or Buffer.

标签 javascript http npm request

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) {

    }
}

我收到错误:类型错误:第一个参数必须是字符串或缓冲区。

老实说,我不知道为什么,需要帮助。

最佳答案

代码中有几个问题。

  1. 您收到 TypeError: First argument must be a string or Buffer 因为您试图在表单数据中发送 bool 值 false -- HTML 表单不会支持 bool 值。在 HTML 中,选中的复选框将发送其值,而未选中的复选框则不会。

    要解决此问题,您可以将 false 更改为 'FALSE'(string) 并在服务器端解析它。

  2. fs.readFile('retext.png', 'utf8') 的使用不正确。在表单中附加文件,正确的方法是:imageFile: fs.createReadStream('retext.png')

  3. formData: formData用于request.post(...)时,HTTP的Content-Type请求将自动为 multipart/form-data,您无需再次定义 Content-Type header 。

    此外,设置json: true是不正确的,这会使Content-Type成为application/json。这种冲突会使 request 模块困惑,并可能在某些 JavaScript 环境中引起问题。

  4. 回调函数function(err, resp, body){...}应该是request.post(...)的一部分,也许这是一个错字。

总而言之,正确的代码应该是这样的:

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.createReadStream('retext.png')
}

function createDeck(connection) {
  request.post({
    url: '<url>',
    formData: formData
  }, function(err, resp, body) {

  })
}

关于javascript - 类型错误 : First argument must be a string or Buffer.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134578/

相关文章:

javascript - 如何以及在何处初始化 Backbone View 中的 jquery 数据表

javascript - 使用 AngularJS 在 JSON URL 中显示数据

成功休息终点并发出有用的警告

http - 如何使用 HttpListener/HttpListenerResponse 返回带正文的错误页面

javascript - 如何解决与包 node-gyp 相关的 Node 包管理器错误?

javascript - Jquery UI 日期选择器如何

java - POST 请求 (HttpURLConnection) 的有趣问题 - 但为什么会发生这种情况呢?

javascript - 无法导入/导出 vuejs 组件

node.js - Yeoman 生成器发布到 npm 后不包含子生成器

javascript - 如何使二十面体上的三 Angular 形侧面积增加和减少,而不保留形状 "intact"?