我有一个需要在查询的where子句中输入日期的模型。
const Model = sequelizeTwo.define('model', {
A: Sequelize.BIGINT,
B: Sequelize.DOUBLE,
C: Sequelize.DOUBLE,
D: Sequelize.DOUBLE,
E: Sequelize.DOUBLE,
F: Sequelize.DOUBLE,
DATE: Sequelize.DATEONLY,
newCol: Sequelize.VIRTUAL
},{
tableName: "Model",
timestamps: false,
freezeTableName: true
})
此处的 DATE
用作查询的参数,以在客户端上显示信息。但这就是使用的目的。我不想将DATE
发送回客户端,但看不到将其删除的方法。
如果我将其从模型中删除,则会出现时区错误,这也是另一个问题。
app.get('/api/:date', (req, res) => {
var date = req.params.date
Model.findAll({
where: {
DATE: {
[Op.eq]: date
}
},
order: [
['A', 'ASC']
]
}).then(result => {
...
for (i; i < result.length; i++) {
...
delete result[i].DATE
console.log(result[i].DATE)
result[i]["newCol"] = values;
}
res.json(result);
})
})
我尝试在循环内外使用delete运算符,但这没有用。它仍然保留该属性并将其发送回客户端
delete result[i].DATE //Inside loop
delete result.DATE //before loop
赋值完成后它们会更新,但属性/键无法修改。
result[i].DATE = null or undefined
我在这里想要实现的是,我只想发送一个对象,该对象具有续集模型除了 DATE
答案 0 :(得分:1)
在这种情况下,我认为您应该使用excludes
功能:
Model.findAll({
where: {
DATE: {
[Op.eq]: date
}
},
order: [
['A', 'ASC']
],
attributes: { exclude: ['DATE'] }
})
此处有更多信息:sequelize documentation
答案 1 :(得分:0)
我认为,最佳实践是为视图创建另一个模型作为数据传输对象(DTO),并仅将所需的属性映射到该模型(不使用Date
)。
进一步阅读:DTO。
伪代码示例:
Model.findAll({
//...
}).then(result => {
...
let resultDTO = mapToDTO(result);
res.json(resultDTO);
})