Javascript 当承诺用于动态部分时,如何将静态和动态数据包含到express渲染函数中?

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

我正在使用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中有我的渲染函数,我被困在如何包含静态内容中。在哪里可以放置我的
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。非常感谢!我就这样试试。