【问题标题】:nodeJS cannot see local path when using API endpointnodeJS在使用API​​端点时看不到本地路径
【发布时间】:2021-05-06 15:50:19
【问题描述】:

下面的代码在独立文件中运行时运行良好。但是当我尝试在我的 API 端点中使用它并向邮递员发送请求时,它似乎无法正常工作。

我不明白为什么。尝试使用相同的 API 端点编写 excel 文件时,我也遇到了同样的问题。如果我指定路径,它将找不到它。如果我只使用文件名,它会在当前目录中正常写入。

我错过了什么?下面的代码来自我在独立文件中使用它时的代码。如果我在下面的这条路线中使用它,它将无法工作。

exports.download_excel = async (req, res) => {....

完整代码如下

// modules import
const path = require('path');
const fs = require('fs');
const util = require('util');
const csv = require('@fast-csv/parse');
const { forEach } = require('p-iteration');

// const path = '../csv/';
const casesBO = [];


const readCSVFiles = async function() {
  try {
    const allLocalFiles = path.join('csv/');
    const readDir = util.promisify(fs.readdir);
    await readDir(allLocalFiles, async function(err, file) {
      forEach(file, async item => {
        fs.createReadStream('csv/' + item)
          .pipe(csv.parse({ headers: true, delimiter: ';' }))
          .on('error', error => console.error(error))
          .on('data', async row => {
            if (row['[REGION2]'] !== 'FR') {
              casesBO.push(row['[CALLERNO_EMAIL_SOCIAL]']);
              console.log(
                `${row['[AGENT]']} is ${row['[REGION2]']} and case = ${
                  row['[CALLERNO_EMAIL_SOCIAL]']
                }`
              );
            }
          })
          .on('end', async rowCount => {});
      });
    });
  } catch (error) {
    console.log(error);
  }
};

【问题讨论】:

    标签: javascript node.js express path


    【解决方案1】:

    你是awaiting readDir,但你也给它一个回调函数。你不能既 await 一个 Promise 又给它一个回调。就此而言,Promises 根本不将回调作为参数。

    而且你到处都在写async,这对于不等待内部任何东西的函数是没有用的。

    const readCSVFiles = async function () {
        try {
            const allLocalFiles = path.join('csv/');
            const readDir = util.promisify(fs.readdir);
    
            const files = await readDir(allLocalFiles);
    
            for (let file of files) {
    
                fs.createReadStream('csv/' + file)
                    .pipe(csv.parse({ headers: true, delimiter: ';' }))
                    .on('error', error => console.error(error))
                    .on('data', row => {
                        if (row['[REGION2]'] !== 'FR') {
                            casesBO.push(row['[CALLERNO_EMAIL_SOCIAL]']);
                            console.log(
                                `${row['[AGENT]']} is ${row['[REGION2]']} and case = ${row['[CALLERNO_EMAIL_SOCIAL]']
                                }`
                            );
                        }
                    })
                    .on('end', rowCount => { });
            }
        } catch (error) {
            console.log(error);
        }
    };
    

    【讨论】:

    • 谢谢!我还是编程新手,您的回答对我帮助很大。我已经发现我需要在它工作的路径之前添加 ___dirname,但是当我尝试运行它时,似乎一切都会停止。使用您的代码,一切顺利。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 2017-08-13
    • 2012-04-06
    • 2021-08-30
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多