在Sequelize结果中包含资源链接

时间:2018-08-19 12:47:08

标签: json node.js rest sequelize.js

我正在构建一个使用Sequelize与数据库进行交互的rest api。查询如下:

function read_category(req, res) {
    Category.findById(req.params.categoryId, {rejectOnEmpty: true}).then(category => {
        res.json(category);
    }).catch(Sequelize.EmptyResultError, function () {
            res.status(404).json({message: 'No category found'});
        }
    ).catch(function (err) {
            res.send(err);
        }
    );
}

现在,我希望从Sequelize返回的类别对象然后返回给用户,以将link包含到资源中。我可以做到:

category.dataValues.link = config.base_url + 'categories/' + category.dataValues.id;

这将导致:

{
    "id": 1,
    "name": "TestCategory 1",
    "position": 1,
    "createdAt": "2018-08-19T11:42:09.000Z",
    "updatedAt": "2018-08-19T11:42:09.000Z",
    "link": "http://localhost:3000/categories/1"
}

由于我的路由数量超过了此路由,所以我想知道是否存在一种动态的方法来将link属性添加到每个类别。我不想将其保存在数据库中,因为基本URL可能有所不同。

谢谢!

1 个答案:

答案 0 :(得分:1)

更好的方法是创建一个getter方法

const Category = sequelize.define( 'category' , {
    ....
    your_fields
    ....
},
{    
    getterMethods:{
        link() {
            return config.base_url + 'categories/' + this.id;
        }
    }
});

module.exports = Category;

然后

Category.findAll(...).then(categories => {
    // Now there is no need to append data manually , it will added each time when you query 
    console.log(categories); // <-- Check the output
})