我有一个API,可以检索属于用户的所有注释。我只想在我的API中返回加密的ID。我有一个对评论ID进行编码的getter。这是我的模特:
const Comment = sequelize.define('comment', {
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id',
get:encodeId, //function which encrypts id
set:decodeId //function which decrypts id
},
userId: {
type: DataTypes.BIGINT,
allowNull: false,
field: 'user_id'
})
这样做
Comment.findAll({where: {userId}}) ,
该ID正在加密,非常好。 我的问题是,如果我想查找给定了加密评论ID的评论的所有者。 例如,给定ID 123456,其加密为“ P11Y9052Oam”。做的时候
Comment.findAll({where: { id:"P1lY9052Oam"}})
我收到以下错误: SequelizeDatabaseError:整数输入无效的语法:“ P1lY9052Oam” 。 我想知道是否有一种方法可以通过续集来转换where属性。在这里,我希望id由id设置器的encodeId函数转换。
答案 0 :(得分:0)
您可以在Comment模型上声明一个静态函数
例如:
const Comment = sequelize.define('comment', {
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id',
get:encodeId, //function which encrypts id
set:decodeId //function which decrypts id
},
userId: {
type: DataTypes.BIGINT,
allowNull: false,
field: 'user_id'
})
Comment.commentsByUserEncodeedId = function(id){
// "decodeId" is your decode function
return Comment.findAll({where: { id: decodeId(id) }});
}
// calling the function
Comment.commentsByUserEncodeedId("P1lY9052Oam")
.then(function(results){
console.log(results)
});