Bookshelf、Knex 和 mysql 保存一个对象的列表
Bookshelf, Knex and mysql to save a list of an object
在这种情况下使用Bookshelf模型向数据库插入数据我很困惑:
我正在使用这些库:
knex、书架、express、body-parser 和 mysql 数据库
我在数据库上有一个 table 称为位置,它包含以下列:
loc_id
、latitude
、longitude
、time
这个位置是从一个用户发送的,所以我需要用 user_id
将 loc_id
保存在另一个 table 中
保存位置(单个对象)而不保存 user_id 我使用此代码:
.post(function (req, res) {
Loc.forge({latitude: req.body.location.lat,
longitude: req.body.location.lng,
date:req.body.time,
speed:req.body.speed,
gpsAnten:req.body.gpsAnten})
.save()
.then(function (location) {
res.json({error: false, data: {id: location.get('id')}});
})
.catch(function (err) {
res.status(500).json({error: true, data: {message: err.message}});
});
});
但是现在,我正在从我的设备发送 post 正文请求:(它是 JSON 格式)
{
"user_id": 135,
"locations": [
{
"id": 1,
"latitude": "35.374760",
"longitude": "51.5123916",
"date": "0000-00-00 00:00:00"
},
{
"id": 2,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 3,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 4,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 5,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 6,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
}
]
}
如何在location
table 中保存每个位置并获取此 Id,然后将其 loc_id
和 user_id
保存在 loc_user
table ?
至少我找到了解决这个问题的方法;这是我的代码:
.post(function (req, res) {
deviceId = req.body.id
locationArray = req.body.frame;
locationArray.forEach(function(element) {
console.log(element);
Loc.forge({latitude: element.location.lat,
longitude: element.location.lng,
date: element.time,
speed: element.speed,
gpsAnten: element.gpsAnten})
.save()
.then(function (location) {
userDevice.forge({
device_id: deviceId,
location_id: location.get('id')
})
.save()
.then(function(middleware) {
console.log('Save middleware');
})
.catch(function(err) {
console.log('Error middleware:' + err.message);
})
})
.catch(function (err) {
console.log('Error location:' + err.message);
});
});
});
它不像我需要的那么清楚,但似乎是唯一的解决方案。
在这种情况下使用Bookshelf模型向数据库插入数据我很困惑:
我正在使用这些库: knex、书架、express、body-parser 和 mysql 数据库
我在数据库上有一个 table 称为位置,它包含以下列:
loc_id
、latitude
、longitude
、time
这个位置是从一个用户发送的,所以我需要用 user_id
loc_id
保存在另一个 table 中
保存位置(单个对象)而不保存 user_id 我使用此代码:
.post(function (req, res) {
Loc.forge({latitude: req.body.location.lat,
longitude: req.body.location.lng,
date:req.body.time,
speed:req.body.speed,
gpsAnten:req.body.gpsAnten})
.save()
.then(function (location) {
res.json({error: false, data: {id: location.get('id')}});
})
.catch(function (err) {
res.status(500).json({error: true, data: {message: err.message}});
});
});
但是现在,我正在从我的设备发送 post 正文请求:(它是 JSON 格式)
{
"user_id": 135,
"locations": [
{
"id": 1,
"latitude": "35.374760",
"longitude": "51.5123916",
"date": "0000-00-00 00:00:00"
},
{
"id": 2,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 3,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 4,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 5,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
},
{
"id": 6,
"latitude": "35.6247466",
"longitude": "51.51241",
"date": "0000-00-00 00:00:00"
}
]
}
如何在location
table 中保存每个位置并获取此 Id,然后将其 loc_id
和 user_id
保存在 loc_user
table ?
至少我找到了解决这个问题的方法;这是我的代码:
.post(function (req, res) {
deviceId = req.body.id
locationArray = req.body.frame;
locationArray.forEach(function(element) {
console.log(element);
Loc.forge({latitude: element.location.lat,
longitude: element.location.lng,
date: element.time,
speed: element.speed,
gpsAnten: element.gpsAnten})
.save()
.then(function (location) {
userDevice.forge({
device_id: deviceId,
location_id: location.get('id')
})
.save()
.then(function(middleware) {
console.log('Save middleware');
})
.catch(function(err) {
console.log('Error middleware:' + err.message);
})
})
.catch(function (err) {
console.log('Error location:' + err.message);
});
});
});
它不像我需要的那么清楚,但似乎是唯一的解决方案。