我在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”变量。
1条答案
按热度按时间mrfwxfqh1#
getGraphData函数使用的是.then,当它执行时,它会调用会话并立即返回,这就是为什么它返回空。
尽管您在getGraphData上执行了wait,但您的getGraphData函数需要定义为async,并将wait与session一起使用才能使其工作。