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
を呼び出し、モデルを指定する場合:sequelize\lib\dialects\abstract\query.js:675
に
TypeError: this.model.bulkBuild is not a function
スタックポイント:エージェントが、私はsequelizeからスローエラーが発生します。
このエラーは続くまでというクエリタイプを適用します。この時点でクエリが完了し、JSON応答が返されますが、エージェントモデルのインスタンスではありません。 sequelizeクエリのJSON応答には、マップする必要があるフィールド名が含まれています。
エクスプレスサンプル(https://github.com/sequelize/express-example/blob/master/models/index.js)に記載されている指示に従ってモデル(その1つ)をインポートしました。モデルコレクションには、エージェントモデルが含まれていることが示されています。
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/26QueryTypes
を操作し、私は二つのことを発見した後 - 私は不注意モデル(エージェント)の名前のデータベースにテーブルを作成したこと、および返されるオブジェクトはtablename
を持っていること空のプロパティ値。 schema
とtablename
は私によって指定されますが、多くのクエリとテーブルを結合するストアドプロシージャであるクエリは、Agent
というデータベースのオブジェクトに直接マップされません。それは私には、は、クエリの結果にバインドされている自分のモデルを作成しているので、これは問題ではありませんはないと示唆していると言われています。あなたsequelize を使用するためにきれいな方法を説明する混乱.i'mは、あなたの質問ともプロジェクトに私に言ったようなモデルディレクトリはindex.jsが含まれていることを確認し、あなたのコードファイルに
var models = require('../models');
を
クエリは何ですか? – Adam
'db.sequelize .query( )「DECLARE @response VARCHAR(256); EXEC API_Login @agentnum = N '」+ agentNum +「'、@hashedPassword = '" + password + "'、@response = @response OUTPUT (エージェント); .spread(ファンクション(エージェント){ res.status(200).json(エージェント); }}) .catch(function(err){ handleError(err、res); }); 'これは呼び出されるストアドプロシージャです。 –
'type:sequelize.QueryTypes.SELECT'を実行するとどうなりますか? – Adam