gpt4 book ai didi

javascript - Sequelize不返回模型实例

转载 作者:行者123 更新时间:2023-11-30 15:34:06 25 4
gpt4 key购买 nike

sequelize 文档 ( http://docs.sequelizejs.com/en/v3/docs/raw-queries/ ) 指出:

If you pass a model the returned data will be instances of that model.

// 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
})

我已经为名为 agent 的资源定义了一个模型。

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 不是函数

堆栈指向sequelize\lib\dialects\abstract\query.js:675

此错误一直存在直到我应用sequelize.QueryTypes.RAW 的QueryType。此时查询完成,我得到一个 JSON 响应,但它不是我的代理模型的实例。来自 sequelize 查询的 JSON 响应包含应映射到的字段名称。

我已经根据 express 样本 (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);
});
}

我希望查询在运行该查询时返回一个 Agent 实例(从 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 之后,我发现了两件事 - 我无意中在数据库中创建了一个带有模型名称(代理)的表,并且返回的对象的 tablename 属性值为空。 schematablename 是我指定的,但是查询是一个连接多个查询和表的存储过程,不会直接映射到我的数据库中的对象名为 代理。话虽如此,对我来说,文档似乎表明这无关紧要,因为我正在创建自己的绑定(bind)到查询结果的模型。

最佳答案

sequelize 文档令人困惑。我正在向您解释使用 sequelize 的简洁方法把

var models = require('../models');

在您的代码文件中,请确保模型目录包含您在问题中告诉我的 index.js 以及项目模型。 小心,除了正确配置的模型之外,不能有任何东西。现在放

 models.sequelize.query("select 1 as val").then(function(result){
console.log(result)
})

在你的代码中要检查连接,您还应该使用类似

的查找查询
 models.Projects.findAll().then(function(result){
console.log(result)
})

关于javascript - Sequelize不返回模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com