我有两个型号。公司和预订。
在模型公司的关系部分
"bookings": {
"type": "hasMany",
"model": "Booking",
"foreignKey": "companyId"
}
问题是,可以在没有companyId的情况下发布预订,这是不正确的 来自探险家。
Booking {
bookingId (string, optional),
name (string),
location (string),
companyId (string, optional)
}
答案 0 :(得分:3)
您实际上无法实施此特定验证。相反,你有几个不同的选择:
a)您可以通过端点POST /api/Company/{id}/Bookings
强制执行通过公司创建预订,方法是禁用Booking.disableRemoteMethod('create', ...)
以及能够从Booking
模型创建记录的任何其他方法
b)您可以添加远程挂钩来检查公司记录是否存在并相应地抛出错误。
Booking.beforeRemote('create', function(ctx, booking, next) {
var Company = Booking.app.models.Company;
var companyId = ctx.req.body.companyId;
if (companyId) {
errorMsg = 'Company with id=' + companyId + ' does not exist.';
var noCompany = new Error(errorMsg);
Company.findById(companyId, function(err, company) {
if (err) next(err);
if (!company) {
ctx.res.statusCode = 400;
next(noCompany);
} else {
next();
}
});
} else {
next();
}
});
您还必须对允许记录创建的任何其他端点执行相同的操作,例如PUT /api/Bookings
。
希望有所帮助!
答案 1 :(得分:0)
您可以在booking.json文件中显式添加companyId属性,并添加required:true属性。它看起来像
{
"properties": {
"companyId": {
"type": "number",
"required": true
},
... //other properties
}
}
答案 2 :(得分:0)
在richardpringle answer part b booking
对我来说是个空物。
我能够通过将app
添加到booking.js文件中来获得此答案,如下所示:
'use strict';
var app = require('../../server/server');
module.exports = function(Booking) {
Booking.beforeRemote('create', function(ctx, booking, next) {
var Company = app.models.Company;
var companyId = ctx.req.body.companyId;
if (companyId) {
errorMsg = 'Company with id=' + companyId + ' does not exist.';
var noCompany = new Error(errorMsg);
Company.findById(companyId, function(err, company) {
if (err) next(err);
if (!company) {
ctx.res.statusCode = 400;
next(noCompany);
} else {
next();
}
});
} else {
next();
}
});
};
var Company = Booking.app.models.Company;
var Company = app.models.Company;