在Sequelize模型中将对象用作列包装器

时间:2018-11-07 15:54:44

标签: node.js sequelize.js

我正在使用Node,Express,Sequelize和Mssql在现有数据库架构之上构建REST api。

我无法/不允许修改现有数据库,因为有一个遗留应用程序依赖于其结构以及许多硬编码的SQL查询。

我已经阅读了Sequelize的文档,但没有找到有关如何定义模型来实现此目的的任何信息。这可能吗,如果可以,怎么办?

我想从api返回什么

{
    id: 1234,
    title: "abc"
    images: ["img.jpg", "img.jpg", "img.jpg"]
}

表的外观如下:

 +----+-------+----------+----------+----------+
 | id | title |  image_1 |  image_2 |  image_3 |
 +----+-------+----------+----------+----------+
 | 1  | abc   | img1.jpg | img2.jpg | img3.jpg |
 +----+-------+----------+----------+----------+

我的模型定义不完整

const News = sequelize.define(
    "news",
    {
        id: Sequelize.INTEGER,
        title: Sequelize.TEXT,
        images: ????
    }
)

1 个答案:

答案 0 :(得分:2)

您可以尝试使用getter设置“图像”字段:

images: {
    type: Sequelize.ARRAY(Sequelize.STRING),
    get() {
        const imageFields = ['image_1', 'image_2', 'image_3'];
        return imageFields.map(this.getDataValue);
    },
}

UPD:以上方法可用于在现有属性中进行定义。

如果要在模型中制作,请尝试以下操作:

const News = sequelize.define(
    "news",
    { ... },
    {
        getterMethods: {
            name() {
                const imageFields = ['image_1', 'image_2', 'image_3'];
                return imageFields.map(field => this[field]);
            }
        }
    }
)