Javascript Sequelize-Nodejs-保存前检查外键约束
这是保存“Orchard”记录的代码。代码可以工作,但我想了解如何以良好的方式管理包含外键(在本例中为“cropId”)的数据插入,这是因为orchardId可能是无效值(例如,它不存在),因此我想了解如何处理关于外键约束的错误 updatev2:我解决了设置错误控制器的问题。现在我唯一的问题是打印错误时出现“错误:未实现”Javascript Sequelize-Nodejs-保存前检查外键约束,javascript,mysql,node.js,sequelize.js,async.js,Javascript,Mysql,Node.js,Sequelize.js,Async.js,这是保存“Orchard”记录的代码。代码可以工作,但我想了解如何以良好的方式管理包含外键(在本例中为“cropId”)的数据插入,这是因为orchardId可能是无效值(例如,它不存在),因此我想了解如何处理关于外键约束的错误 updatev2:我解决了设置错误控制器的问题。现在我唯一的问题是打印错误时出现“错误:未实现” OrchardService.add = function (req, res, next) { var orchard = req.body; db.
OrchardService.add = function (req, res, next) {
var orchard = req.body;
db.Area.create({
name: orchard.name,
cropId: orchard.crop,
orchard: {}
}, {
include: [{model: db.Orchard, as: 'orchard'}]
})
.then(function (area) {
var coords = orchard.coordinates.map(function (coord) {
coord.areaId = area.id;
return coord;
});
db.AreaCoordinate.bulkCreate(coords)
.then(function () {
next({status: 200, status_message: 'OK', data: {orchard: area.orchardId}})
})
})
.catch(function (err) {
if (err instanceof Sequelize.ForeignKeyConstraintError) {
next({status: 501, status_message: 'Invalid Crop', error: err.message});
} else {
next({status: 500, status_message: 'Internal Server Error', error: err.message});
}
console.error(err);
})
测试:
it('Add Orchard', function (done) {
chai.request(app)
.post('/orchard')
.send({
name: 'pantano',
crop: 1232,
coordinates: [
{latitude: '1', longitude: '3'},
{latitude: '2', longitude: '4'},
{latitude: '1', longitude: '5'}
]
})
.then(function (res) {
expect(res).to.have.status(200);
expect(res).to.have.header('content-type', 'application/json; charset=utf-8');
expect(res.body).to.be.an('object');
expect(res.body).to.have.status(200);
expect(res.body.status_message).to.equal('OK');
expect(res.body).to.have.property('data');
expect(res.body.data).to.have.property('orchard');
expect(res.body.data.orchard).to.be.an('number');
done();
})
.catch(function (err) {
done(err);
});
});
错误:
Error: Not Implemented
at Test.Request.callback (node_modules/superagent/lib/node/index.js:626:17)
at node_modules/superagent/lib/node/index.js:795:18
at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/parsers/json.js:16:7)
at endReadableNT (_stream_readable.js:1047:12)
at _combinedTickCallback (internal/process/next_tick.js:102:11)
at process._tickCallback (internal/process/next_tick.js:161:9)
错误:未实现
在Test.Request.callback(node_modules/superagent/lib/node/index.js:626:17)
在node_modules/superagent/lib/node/index.js:795:18
在输入消息时。(node_modules/superagent/lib/node/parsers/json.js:16:7)
在endReadableNT(_stream_readable.js:1047:12)
at _combinedTickCallback(内部/流程/下一步_tick.js:102:11)
在进程中。_tick回调(内部/process/next_tick.js:161:9)
使用哪个数据库?也许最好将其作为DB级别约束实现?是一个mysql数据库,此问题由DB级别处理,已经由DB级别处理…但是如果不存在cropId,我希望处理显示消息“无效作物id”的错误“.我本想抓住这个例外,但我不明白……问题是怎么更新的啊,我明白了。好吧,没有理由写“抛出新错误();doSomething()'作为throw
立即将控件传递到下一个catch
。相反,只需在特定的catch
块中调用next
。无意冒犯,但您不认为这是一个值得再问一个问题的不同问题吗?)至少可以说,它与问题标题没有任何关系。使用了哪个数据库?也许最好将其实现为DB级别约束?是一个mysql数据库,这个问题由DB级别处理,它已经由DB级别处理…但是如果不存在cropId,我希望处理显示消息“无效裁剪id”的错误。我本想抓住这个例外,但我不明白…问题是怎么更新的啊,我明白了。好吧,没有理由写“抛出新错误();doSomething()'作为throw
立即将控件传递到下一个catch
。相反,只需在特定的catch
块中调用next
。无意冒犯,但您不认为这是一个值得再问一个问题的不同问题吗?)至少可以说,它与问题标题没有任何关系。