我正在为节点应用程序使用express和sequelize。在控制器文件中,我有以下内容:
var models = require('../models'),
Property = models.property,
Sequelize = require('sequelize');
module.exports = function(req, res){
Sequelize.query("SELECT * FROM 'property'", { type:Sequelize.QueryTypes.SELECT})
.then(function(properties) {
res.json(properties)
})
}
我可以使用model.findAll,但是当我尝试使用原始查询时,我得到的是TypeError:undefined不是函数。你能指出我在这段代码中做错了什么吗?
答案 0 :(得分:17)
您需要在 query()
实例上调用Sequelize
:
var Sequelize = require('sequelize');
var sequelize = new Sequelize('database', 'username', 'password');
sequelize.query("SELECT * FROM 'property'", { type:Sequelize.QueryTypes.SELECT})
.then(function(properties) {
res.json(properties)
})
答案 1 :(得分:1)
您可以使用
const sql = "select * from ..."
model.sequelize.query(sql, { type: model.sequelize.QueryTypes.SELECT })
.then(function (rows) {
... do a job on the query here...
})
答案 2 :(得分:1)
就我而言,我正在读取文件的内容并将其导入到迁移中:
const sqlFile = fs.readFileSync(file, {encoding: "UTF-8"});
await queryInterface.sequelize.query(sqlFile, {
raw: true,
type: Sequelize.QueryTypes.RAW
});
但是我收到了错误:
Error importing: sql.trim is not a function
。
长话短说,我的 SQL 包含 `(反引号/反引号)字符,我需要转义它。
所以我一读文件就逃脱了:
const sqlFile = fs.readFileSync(file, {encoding: "UTF-8"}).replace('`', '\`');
问题解决了。但我花了一个多小时才弄明白。