Javascript 当承诺用于动态部分时,如何将静态和动态数据包含到express渲染函数中?
我正在使用Node和Express开发一个web应用程序,希望显示来自不同JSON文件的内容。有些包含静态内容,如表的标题和列标签。有些包含可以动态更改的用户数据。首先,我创建了两个不同的函数来读取JSON文件:Javascript 当承诺用于动态部分时,如何将静态和动态数据包含到express渲染函数中?,javascript,node.js,express,Javascript,Node.js,Express,我正在使用Node和Express开发一个web应用程序,希望显示来自不同JSON文件的内容。有些包含静态内容,如表的标题和列标签。有些包含可以动态更改的用户数据。首先,我创建了两个不同的函数来读取JSON文件: const readStaticData = filePath => { fs.readFile(filePath, 'utf-8', (err, staticData) => { if (err) throw err; JSON.parse(static
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中有我的渲染函数,我被困在如何包含静态内容中。在哪里可以放置我的readStaticData('./JSON/staticData1.JSON');readStaticData('./JSON/staticData2.JSON')代码>要渲染的函数?它们不直接依赖于动态内容,例如,无论是否有用户数据,标题都应始终存在
希望我没有遗漏重要信息,这是我的第一个问题。我也是编程新手。如果有人能帮忙,请提前多谢 fs.readFile
始终是异步的,因此您可以在这两种情况下使用readData
它还有一个同步版本:fs.readFileSync
我会这样做。您只需要一个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();
});
});
好的,实际上没有理由使用文件系统来加载静态json。非常感谢!我就这样试试。