【发布时间】:2018-11-12 19:21:43
【问题描述】:
当我去路线“/画廊”时,我从“posts.json”文件中获取数据。使用“fs”模块和read() 方法,我从文件中读取数据,然后将其写入this.pictures 数组。但是当我导航到“/画廊”路线时,会下载名为“画廊”的新数据文件。
我需要从文件中读取数据并将其显示在屏幕上,而不是下载新文件:) 请帮助解决这个问题
app.js:
const express = require('express');
const Database = require('./db');
const app = express();
const port = 3000;
const db = new Database();
app.use(express.json());
app.get('/gallery', (req, res) => {
db.read();
res.send(db.pictures);
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}!`);
});
db.js:
class Database {
constructor(){
this.fs = require('fs');
this.pictures = [];
}
read() {
this.fs.readFile('./posts.json', (err, data)=> {
if(err) {
throw err;
}else {
this.pictures = data;
}
});
}
}
module.exports = Database;
【问题讨论】:
-
read() 是异步的,但在调用 db.pictures() 之前无需等待它完成。如果在 res.send() 之前将 db.pictures() 记录到控制台会发生什么
-
当我登录 db.read() 时 - 未定义当我登录 db.pictues 时 - []
-
另外,您应该将 require(fs) 移出构造函数。所有 require 语句都缓存在节点中,因此将它放在构造函数中是没有意义的。立即启动让您和其他开发人员知道模块依赖项是什么
标签: javascript node.js express ecmascript-6 routing