我正在尝试将我的 super 代理发布请求中的内容类型发送到multipart/form-data。

var myagent = superagent.agent();

myagent
  .post('http://localhost/endpoint')
  .set('api_key', apikey)
  .set('Content-Type', 'multipart/form-data')
  .send(fields)
  .end(function(error, response){
    if(error) {
       console.log("Error: " + error);
    }
  });

我得到的错误是:
TypeError:参数必须是字符串

如果我删除了:
.set('Content-Type', 'multipart/form-data')

我没有收到任何错误,但是我的后端正在以内容类型接收请求:application/json

如何强制将内容类型设置为multipart/form-data,以便可以访问req.files()?

最佳答案

首先,您不会提及以下任一情况:

.set('Content-Type', 'multipart/form-data')

或者
.type('form')

其次,您不使用.send,而是使用.field(name, value)

例子

假设您要发送带有以下内容的表单数据请求:
  • 两个文本字段:namephone
  • 一个文件:photo

  • 因此,您的请求将如下所示:
    superagent
      .post( 'https://example.com/api/foo.bar' )
      .set('Authorization', '...')
      .accept('application/json')
      .field('name', 'My name')
      .field('phone', 'My phone')
      .attach('photo', 'path/to/photo.gif')
    
      .then((result) => {
        // process the result here
      })
      .catch((err) => {
        throw err;
      });
    

    并且,假设您要发送JSON作为其中一个字段的值,则可以执行此操作。
    try {
      await superagent
             .post( 'https://example.com/api/dog.crow' )
             .accept('application/json')
             .field('data', JSON.stringify({ name: 'value' }))
    }
    catch ( ex ) {
        // .catch() stuff
    }
    
    // .then() stuff...
    

    关于node.js - 如何使用node.js super 代理发布multipart/form-data,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13864983/

    10-09 20:05