如何使用 Node 中的 supertest 包从同一目录附加多个文件?

How to attach multiple files from the same directory with supertest package in Node?

我想使用 supertest 将大约 100 个文件附加到 POST 请求中,但我还没有找到任何方法来做到这一点。

const supertest = require('supertest);

const fs = require('fs');
const { promisify } = require('utils');

const request = supertest('http://localhost:3000');

const readdir = promisify(fs.readdir);

(async () => {
  try {
    const files = await readdir(path.resolve(__dirname, '/path/to');
    request
      .post('/upload')
      .attach('file', files)
      .end((response => {
        console.log(response);
      });
  } catch(err) => {
    console.error(err);
  }
)();

给定以下代码,每次要在请求中发送 fileN 时,请求都需要链接附加方法,所以我想知道如何递归附加使用 fs 节点核心模块

同一文件夹内的每个文件

您可能只想使用 supertest 和 Promise.all 提出几个单独的请求。您可以使用 globby 获取文件列表,例如。没有异步可能会更直接,除非你在其他地方需要结果。

const files = glob(path.resolve(__dirname, '/path/to'));

const requests = files.map((file) => {
    return request
      .post('/upload')
      .attach('file', file)
      .end((response => {
        console.log(response);
      });
});

Promise.all(requests).then(console.log('done')).catch(console.error);

supertest 通过测试功能扩展了 superagent 并且工作方式相同。 request.post('/upload') 创建请求实例并且可链接。实例方法 return 用于链接的实例本身:

const requestInstance = request.post('/upload');

requestInstance === requestInstance.attach('file', ...);

supertestsuperagent 是可行的,当它与 async..await:

一起使用时,最好将结果链接为正确控制流的承诺
  try {
    const files = await readdir(path.resolve(__dirname, '/path/to');
    let requestInstance = request.post('/upload');

    for (const file of files) {
      // no need to reassign requestInstance because it's same instance
      // requestInstance = requestInstance.attach('file', file);
      requestInstance.attach('file', file);
    }

    const response = await requestInstance;
  } catch (err) {
    console.error(err);
  }