我正在开展一个项目,我必须在3个不同的表格中存储多个停靠点,一条路线及其关系。我成功地存储了停靠点和路线。但是要存储我需要获得最近存储的路径的id(自动生成的主键)和所有最近存储的停靠点的关系。我通过运行查询来查找最大存储ID的最大ID。这是我的代码:
create: function (req,res,next)
{
var stopsArray = req.param('latLngArray');
var so="";
var totalBusStops = req.param('totalStops');
var routeToSave=new OneRoute();
routeToSave.routeName="This route";
routeToSave.totalStops=totalBusStops;
Routes.create(routeToSave, function routeCreated(err, routeToSave){
if(err) return next(err);
res.json(routeToSave);
}); // creating routes
for(var i=0;i<stopsArray.length;i++){
var us = new busStop();
us.lngPos = stopsArray[i].Lng;
us.latPos = stopsArray[i].Lat;
BusStop.create( us ,function stopCreated (err,us)
{
if(err) return next(err);
res.json(us);
}); // creating bus stops#
}
var currentRouteId = "";
Routes.query("select max(routeId) from routes", function(err, results) {
if(err){ res.json({ error: err.message }, 400);}
else{
currentRouteId = results[0]['max(routeId)'];
console.log("route ID: "+results[0]['max(routeId)']);
}
}); // max riute ID
var relation= new routeStopR();
relation.routeId=currentRouteId;
var currentStopId = "";
BusStop.query("select max(stopId) from busstop", function(err, results) {
if(err){res.json({ error: err.message }, 400);}
else{
currentStopId = results[0]['max(stopId)'];
console.log("Bus Stop ID: "+currentStopId);
}
});
relation.stopId=currentStopId;
console.log("");
console.log("relation Route: "+relation.routeId);
console.log("relation Stop: "+relation.stopId);
RouteStops.create(relation,function relationCreated (err,relation)
{
if(err) return next(err);
res.json(relation);
});
}
我面临的问题是,无论我把它们放在函数的哪个位置,get查询都会在函数的末尾运行。由于这个原因,我无法使用我从查询中获得的id。在这方面的任何帮助将不胜感激。
我面临的另一个问题是从max(stopId)
表获取busstop
的查询从旧数据返回值。有时来自max(routeID)
的{{1}}也有这个问题。
请帮我解决这个问题。
答案 0 :(得分:2)
您的问题是一个非常常见的情况,不知道如何在Node.js中使用异步函数。您的查询是异步的,这意味着节点会运行这些查询并继续执行页面上的其余代码。但是,页面上的其余代码取决于查询中的值。一个常见的解决方案是使用像async
这样的库https://www.npmjs.org/package/async
我会通读这些以了解更多