如何设置需要的关系外键

How to set relation foreign key to be required

我有两个模型。公司和预订。
在模型公司的关系部分

"bookings": {
  "type": "hasMany",
  "model": "Booking",
  "foreignKey": "companyId"
}

问题是,可以 post 没有 companyId 的预订是不正确的。
来自探险家

Booking {
  bookingId (string, optional),
  name (string),
  location (string),
  companyId (string, optional)
}

您实际上无法立即执行此特定验证。相反,您有几个不同的选择:

a) 您可以通过端点 POST /api/Company/{id}/Bookings 通过禁用 Booking.disableRemoteMethod('create', ...) 以及能够从 [=13= 创建记录的任何其他方法来强制创建通过公司的预订] 模型.

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

希望对您有所帮助!

您可以在 booking.json 文件中明确添加 companyId 属性,并添加 required:true 属性。它看起来像

{
    "properties": {
        "companyId": {
            "type": "number",
            "required": true
        },
        ... //other properties
    }
}

richardpringle 的 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();
    }
  });
};
  • 第 2 行是新的
  • 第 6 行修改自 richardpringle 的回答
    • 发件人:var Company = Booking.app.models.Company;
    • 收件人:var Company = app.models.Company;