Как синхронно загрузить CSV-файл в память перед обработкой HTTP-запросов

Если вы отметите программу C # как x86 (а не какой-либо CPU), то она увидит HKEY_LOCAL_MACHINE\Software\Wow6432Node\App как HKEY_LOCAL_MACHINE\Software\App\.

Программа .NET для любого процессора будет работать как 64-разрядная процесс, если установлен 64-разрядный .NET. 32-разрядный реестр находится под Wow6432Node для 64-разрядных программ.

2
задан bsheets 28 March 2019 в 05:34
поделиться

2 ответа

Как насчет обеспечения прослушивания http-объекта после загрузки файла в память:


// server.js
var myMap = {};

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

var app = express();

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

Что-то в этом роде.

Вы также можете использовать Обещание

// 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)
    })
  }
})

0
ответ дан dannyjee 28 March 2019 в 05:34
поделиться

Для достижения обеих ваших целей вы можете включить код в файл app.js. App.js запускается только при запуске экспресс-сервера. Не обновляется при обновлении страницы. Вы можете запустить app.listen после окончания чтения.

var myMap = {};

fs.createReadStream('filename.csv')  
  .pipe(csv())
  .on('data', (row) => {
    // Build javascript object
    myMap[row['key']] = row['value'];
  })
  .on('end', () => {
    app.listen(port, () => console.log(`Example app listening on port ${port}!`));
  });

Однако, поскольку я не думаю, что у вас будет много данных, лучше использовать синхронные (блокирующие) методы как для парсера csv, так и для чтения файлов. Это просто облегчает понимание. Я использую csv-parse ниже.

const express = require('express')
const fs = require('fs')
const parse = require('csv-parse/lib/sync')

const app = express()
const port = 3000

/* In this example assume myMap will be
/ `
/ "key_1","key_2"
/ "value 1","value 2"
/ `
*/
var myMap = fs.readFileSync('sample.csv', 'utf8');

/* parsing the csv will return:
/  [Object {key_1: "value 1", key_2: "value 2"}]
*/
const records = parse(myMap, {
  columns: true,
  skip_empty_lines: true
})

app.get('/', (req, res) => res.send('Hello World!' + records[0].key_1))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

протестировать его на runkit

0
ответ дан pooya72 28 March 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: