【发布时间】:2017-01-24 18:28:23
【问题描述】:
续集文档 (http://docs.sequelizejs.com/en/v3/docs/raw-queries/) 指出:
如果您传递模型,则返回的数据将是该模型的实例。
// Callee is the model definition. This allows you to easily map a query to a predefined model
sequelize.query('SELECT * FROM projects', { model: Projects }).then(function(projects){
// Each record will now be a instance of Project
})
我为名为@987654324@ 的资源定义了一个模型。
module.exports = function(sequelize, DataTypes) {
let Agent = sequelize.define('Agent', {
responseStatus: DataTypes.STRING,
agentnum: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false,
field : 'agentno'
},
fname : {
type: DataTypes.STRING,
allowNull : false,
field: 'fname'
},
lname : {
type: DataTypes.STRING,
allowNull: false,
field : 'lname'
},
fullname : {
type: DataTypes.STRING,
allowNull : false,
field: 'full_name'
},
status : {
type: DataTypes.STRING,
allowNull: false,
field: 'business_status'
},
loginDate: DataTypes.DATE
}, {
freezeTableName: false,
timestamps: false
});
return Agent;
};
当使用我的查询调用sequelize.query 并指定model:Agent 时,我收到sequelize 引发的错误:
TypeError: this.model.bulkBuild is not a function
堆栈指向sequelize\lib\dialects\abstract\query.js:675。
此错误持续存在直到我应用了 sequelize.QueryTypes.RAW 的 QueryType。此时查询完成,我收到 JSON 响应,但它不是我的代理模型的实例。来自 sequelize 查询的 JSON 响应包含应映射到的字段名称。
我已经根据他们的快递样本 (https://github.com/sequelize/express-example/blob/master/models/index.js) 中的说明导入了我的模型(它只是一个)。模型集合显示包含我的代理模型。
import Sequelize from 'sequelize';
import config from './config';
export default callback => {
const sequelize = new Sequelize(config.database, config.username, config.password, config.params);
sequelize.sync().then(function() {
let db = { }
let agentModel = sequelize.import('model/agent.js');
db[agentModel.name] = agentModel;
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.sequelize.authenticate().then(function() {
console.log('CONNECTION OK');
});
callback(db);
}).catch(function(err) {
console.log('FAILED TO CONNECT: ', err.message);
});
}
我希望查询在运行该查询时返回一个代理实例(从 POST 调用到我的 api)。我正在使用 MS SQL Server 2008 R2。
感谢任何输入。谢谢。
EDIT 1/30 这是生成sequelize 对象并传入模型的代码。模型集合显示我的项目已添加,但它没有属性。
connectDb: (function () {
var sequelize;
function createInstance() {
var sequelizeInstance, connectedAndAuthenticated;
sequelizeInstance = new Sequelize(config.database, config.username, config.password, config.params);
connectedAndAuthenticated = sequelizeInstance.authenticate();
connectedAndAuthenticated.sequelize = sequelizeInstance;
connectedAndAuthenticated.Sequelize = Sequelize;
var model = sequelizeInstance.import('../src/model/agent.js');
return connectedAndAuthenticated;
}
return {
getInstance : function () {
if (!sequelize) {
sequelize = createInstance();
}
return sequelize;
}
};
}())
EDIT 1/26 在操作QueryTypes 之后,我发现了两件事——我无意中在数据库中创建了一个名称为模型(Agent)的表,并且该对象返回tablename 属性值为空。 schema 和 tablename 是我指定的,但查询是一个连接多个查询和表的存储过程,不会直接映射到我的数据库中名为 Agent 的对象。话虽如此,对我来说,文档似乎表明 这并不重要,因为我正在创建自己的模型,该模型绑定到查询结果。
【问题讨论】:
-
您的查询是什么?
-
db.sequelize .query( "DECLARE @response VARCHAR(256); EXEC API_Login @agentnum = N'" + agentNum + "', @hashedPassword = '" + password + "', @response = @response OUTPUT; SELECT @response AS N'response'",{ model: Agent, type: sequelize.QueryTypes.RAW}) .spread(function(Agent) { res.status(200).json(Agent); }) .catch(function(err) { handleError(err, res); });- 这是一个被调用的存储过程。 -
如果你做
type: sequelize.QueryTypes.SELECT怎么办? -
@Adam 每个其他 QueryType 要么失败,要么在响应中不返回任何内容。
标签: javascript express sequelize.js