将收到的Koajs CSV文件转换为数组/对象

时间:2020-10-30 11:39:23

标签: javascript arrays koa strapi

我正在使用Stradi构建api,并尝试添加导入/导出功能。 导出一完成。但是,由于我是js的新用户,因此不确定在导入过程中如何处理文件。

这是我从请求中获取文件的方式:

var file = ctx.request.files.file;

这是console.log(文件)的输出:

File {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  size: 127,
  path: '/tmp/upload_3f202079094c364546a9d4a792a1d5f5',
  name: 'declaracion.csv',
  type: 'text/csv',
  hash: null,
  lastModifiedDate: 2020-10-30T11:37:37.093Z,
  _writeStream: WriteStream {
    _writableState: WritableState {
      objectMode: false,
      highWaterMark: 16384,
      finalCalled: true,
      needDrain: false,
      ending: true,
      ended: true,
      finished: true,
      destroyed: true,
      decodeStrings: true,
      defaultEncoding: 'utf8',
      length: 0,
      writing: false,
      corked: 0,
      sync: false,
      bufferProcessing: false,
      onwrite: [Function: bound onwrite],
      writecb: null,
      writelen: 0,
      afterWriteTickInfo: null,
      bufferedRequest: null,
      lastBufferedRequest: null,
      pendingcb: 0,
      prefinished: true,
      errorEmitted: false,
      emitClose: false,
      autoDestroy: false,
      bufferedRequestCount: 0,
      corkedRequestsFree: [Object]
    },
    writable: false,
    _events: [Object: null prototype] {},
    _eventsCount: 0,
    _maxListeners: undefined,
    path: '/tmp/upload_3f202079094c364546a9d4a792a1d5f5',
    fd: null,
    flags: 'w',
    mode: 438,
    start: undefined,
    autoClose: true,
    pos: undefined,
    bytesWritten: 127,
    closed: true,
    [Symbol(kCapture)]: false,
    [Symbol(kIsPerformingIO)]: false
  },
  [Symbol(kCapture)]: false
}

是否有将文件转换为数组或对象的想法?

1 个答案:

答案 0 :(得分:1)

您可以使用csv-parser完成此操作,他们的文档具有足够的描述性,但是我会在stradi的背景下写下来。

  1. 在trapi中导出一个函数,您可以将其重新用于所有csv导入

const fs = require('fs');
const csv = require('csv-parser');

function parseCsv(filePath) {
  const results = [];
  return new Promise(resolve => {
    fs.createReadStream(filePath)
      .pipe(csv())
      .on('data', data => results.push(data))
      .on('end', () => {
        resolve(results);
      });
  });
}
module.exports = parseCsv;

  1. 在需要处理csv时导入并重用导出的函数

const parseCsv = require('.pathToExportedFunction/parseCsv');

const myCsv = await parseCsv('filePath.csv');

console.log(myCsv);