这是我两个使用sails generate api model_name生成的模型

Guitar.js

module.exports = {
schema: true,
attributes: {
    brand:{
        type: 'string',
        required: true
    },
    messages:{
        collection: 'message',
        via: 'guitar'
    }
}
};


Message.js

module.exports = {

    schema: true,

    attributes: {
        text:{
            type: 'string',
            required: true
        },
        author:{
            type: 'string',
            defaultsTo: 'Anonymous author'
        },
        guitar:{
            model: 'guitar',
            required: true
        }
    }
};


基本上,一个guitar可以有多个messages

当我向数据库中插入新消息时,就会出现问题:

POST http://localhost:1337/message/

带有JSON内容:

{
    "text": 4,
    "author": "33434",
    "guitar": null,
    "extra": "This attribute will be removed because schema: true"
}


如果发送此消息,则服务器将引发错误,因为消息必须具有guitar

但是,如果我改写"guitar": 34,而34是不存在的吉他ID,则会添加message,并且guitar将更改为null。奇怪的。

这似乎是一个错误,或者也许是预期的行为,但考虑到NoSQL数据库。

我需要进行严格的关联,以便所有数据都有意义。我希望我不必手动创建自己的控制器即可按我的方式处理此逻辑。

基本上,我想要的是当关联ID不存在时Sails会引发错误。

在撰写本文时,我想到了一个解决方案:只需在数据库服务器(MySQL等)上进行配置,以便必须存在外键,然后处理Sails中的错误。但是我对此并不满意,因为它取决于数据库服务器。我希望此功能甚至可以与localDiskDb一起使用。

我的另一个解决方案是实际手动编写一个控制器,并查看使用类似Guitar.find(id).add(new_message)之类的东西会发生什么(也许是错误的,我没有测试过)

最佳答案

我对此不确定,但是您是否尝试过这样:

http://localhost:1337/message/create?text=4&author=3343&guitar=somerandomString

关于javascript - 如何在Sails.js中建立严格的关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43385727/

10-09 22:13