javascript-如何在处理HTTP请求之前将csv文件同步加载到内存中

前端之家收集整理的这篇文章主要介绍了javascript-如何在处理HTTP请求之前将csv文件同步加载到内存中 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试编写一个简单的express / node.js应用程序,该应用程序使用csv文件中的数据来响应GET请求.我想阅读此csv文件生成javascript对象(本质上是键-值映射),然后使生成的映射可用于控制器中的HTTP请求处理逻辑.

我编写了一个读取csv文件并导出所需对象的模块,但不确定如何确保:

>该操作完成,并且对象在处理HTTP请求之前实际存在
>文件操作仅在服务器启动时执行一次,而不是每个请求一次执行,从而导致大量开销

如何在快速应用程序的上下文中组织代码以实现这些目标?

这就是我处理CSV文件的方式:

var myMap = {};

fs.createReadStream('filename.csv')  
  .pipe(csv())
  .on('data',(row) => {
    // Build javascript object
    myMap[row['key']] = row['value'];
  })
  .on('end',() => {
    console.log('Done.');
  });

// Does this work?
module.exports =  myMap;
最佳答案
如何确保将文件加载到内存中之后http对象进行侦听:


// server.js
var myMap = {};

function readCsv(cb){
  fs.createReadStream('filename.csv')  
  .pipe(csv())
  .on('data',() => {
    console.log('Done.');
    cb();
  });
}

var app = express();

exports = Object.freeze({
  server: http.createServer(app)
  init(){
    readCsv(() => {
      this.server.listen(80)
    })
  }
})

这样的事情.

您还可以利用Promise

// server.js
var myMap = {};

function readCsv(){
  return new Promise((request,reject) => {
    fs.createReadStream('filename.csv')  
    .pipe(csv())
    .on('data',(row) => {
      // Build javascript object
      myMap[row['key']] = row['value'];
    })
    .on('end',() => {
      console.log('Done.');
      resolve();
    })
    .on('error',reject)
  })

}

var app = express();

exports = Object.freeze({
  server: http.createServer(app)
  init(){
    return readCsv().then(() => {
      this.server.listen(80)
    })
  }
})

猜你在找的JavaScript相关文章