NodeJS 为什么我从数据库接收的数据是未定义的?

ut6juiuv  于 2023-01-04  发布在  Node.js
关注(0)|答案(1)|浏览(140)

我在express.js服务器上创建API,所以当它接受“get”请求时,模块文件中的某个函数会从图形数据库中请求数据:
module.js文件:

function getGraphData() {
  const cityName = 'Milan';
  const readQuery = `MATCH (City {name: $cityName})-[:LINKED*1..3]-(city:City) RETURN city`;
  const cities = [];
  session
    .run(readQuery, { cityName })
    .then(function (result) {     
      result.records.forEach(function (record) {
        cities.push({
          title: record._fields[0].properties.name,
        });
      });
      return cities;
    })
    .catch((err) => console.log(err));
}
module.exports.getGraphData = getGraphData;

接收数据后,它存储在名为cities的数组中,如下所示:
城市:[ {标题:“城市1”},{标题:“城市2”},{标题:'城市3' } ]
函数返回这个数组,然后我从模块中导入函数并在路由器文件中使用它:

const { getGraphData } = require('./../db/neo4j');

router.get('/', async (req, res) => {
  try {
    const p = await getGraphData();
    console.log('p:', p); //p is undefined
    //return res.status(200).send(p); 
    return res.status(206).json(p); // empty response, not any data only status code
  } catch (e) {
    console.log(e); 
});

那么,我做错了什么呢?为什么API response是空的?
我使用调试器。数据确实在模块中起作用,但没有传递给API响应“p”变量。

mrfwxfqh

mrfwxfqh1#

getGraphData函数使用的是.then,当它执行时,它会调用会话并立即返回,这就是为什么它返回空。
尽管您在getGraphData上执行了wait,但您的getGraphData函数需要定义为async,并将wait与session一起使用才能使其工作。

async function getGraphData() {
      const cityName = 'Milan';
      const readQuery = `MATCH (City {name: $cityName})-[:LINKED*1..3]-(city:City) RETURN city`;
      const cities = [];
      try{
          const result = await session.run(readQuery, { cityName });
          result.records.forEach(function (record) {
                cities.push({
                  title: record._fields[0].properties.name,
                });
              });
          return cities;
        }
        catch(err){
           console.log(err);
           return err;
        }
  }

相关问题