我正在使用Node和Express制作一个web应用程序,并希望显示来自不同JSON文件的内容。有些包含静态内容,如表格的标题和列标签。有些包含可以动态变化的用户数据。首先,我做了两个不同的函数来读取JSON文件。
const readStaticData = filePath => {
fs.readFile(filePath, 'utf-8', (err, staticData) => {
if (err) throw err;
JSON.parse(staticData);
});
};
和这个用于读取动态数据
const readData = filePath => new Promise((resolve, reject) => {
fs.readFile(filePath, (err, fileData) => {
if (err) {
reject(err);
return;
}
try {
const object = JSON.parse(fileData);
resolve(object);
} catch(err) {
reject(err);
}
});
});
这是我的router.get()函数目前的样子。
router.get('/', (req, res) => {
Promise.all([
readData('./JSON/dynamicData1.json'),
readData('./JSON/dynamicData2.json')
])
.then((data) => {
res.render('home',
{
dynamicData1: data[0],
dynamicData2: data[1]
}
);
})
.catch((err) => {
console.log(err);
res.status(500).end();
});
});
所以我在Promise里面有我的render函数 我被卡住了 如何才能把静态内容也包含进去 我可以把我的 readStaticData('./JSON/staticData1.json'); readStaticData('./JSON/staticData2.json');
函数来渲染?它们并不直接依赖于动态内容,例如,无论是否有用户数据,标题都应该一直存在。
希望我没有遗漏重要信息,这是我在这里的第一个问题。而且我也是编程新手。如果有人能帮我,先谢谢了!
我会像这样做。你可以只需要一个JSON文件,并将它准备好,因为它是静态的。
const staticData = require('./path/to/staticData.json')
// const readStaticData = filePath => {
// fs.readFile(filePath, 'utf-8', (err, staticData) => {
// if (err) throw err;
// JSON.parse(staticData);
// });
// };
const readData = filePath => new Promise((resolve, reject) => {
fs.readFile(filePath, (err, fileData) => {
if (err) {
reject(err);
return;
}
try {
const object = JSON.parse(fileData);
resolve(object);
} catch(err) {
reject(err);
}
});
});
router.get('/', (req, res) => {
Promise.all([
readData('./JSON/dynamicData1.json'),
readData('./JSON/dynamicData2.json')
])
.then((data) => {
res.render('home',
{
dynamicData1: data[0],
dynamicData2: data[1],
staticData
}
);
})
.catch((err) => {
console.log(err);
res.status(500).end();
});
});
fs.readFile
总是异步的,所以你可以在这两种情况下使用readData。
也有一个同步的版本。fs.readFileSync
.