bsh*_*ets 8 javascript csv asynchronous node.js express
我正在尝试编写一个简单的 express/node.js 应用程序,该应用程序使用 csv 文件中的数据响应 GET 请求。我想读取这个 csv 文件来生成一个 javascript 对象(本质上是一个键值映射),然后使生成的映射可用于控制器中的 HTTP 请求处理逻辑。
我编写了一个模块来读取 csv 文件并导出所需的对象,但我不确定如何确保:
我如何组织我的代码以在 Express 应用程序的上下文中实现这些目标?
这就是我处理 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;
Run Code Online (Sandbox Code Playgroud)
如何确保 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)
})
}
})
Run Code Online (Sandbox Code Playgroud)
类似的东西。
您还可以使用 Promise
// server.js
var myMap = {};
function readCsv(){
return new Promise((resolve, 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)
})
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4544 次 |
| 最近记录: |