admin管理员组文章数量:1416642
I'm trying to use raw queries from sequelize in an express app. My folder structure is:
/
/index.js
/models/index.js
/models/price.js
/controllers/price.js
I want to use sequelize which I already define in /models/index.js from a controller.
This is /models/index.js:
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require('sequelize')
, sequelize = new Sequelize(process.env.MYSQL_DB, process.env.MYSQL_USER, process.env.MYSQL_PASSWORD, {
dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb'
port: 3306, // or 5432 (for postgres)
timezone:'America/Sao_Paulo',
});
sequelize
.authenticate()
.then(function(err) {
console.log('Connection has been established successfully.');
}, function (err) {
console.log('Unable to connect to the database:', err);
});
var db = {};
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
module.exports.db = db;
I want to use a raw query in my price controller:
exports.index = function(req, res, next) {
// var environment_hash = req.session.passport.user.environment_hash;
var Price = require('../models/index').Price;
var db = require('../models/index').db;
console.log(db);
db.query(`SELECT ... `).spread((results, metadata) => {
// Results will be an empty array and metadata will contain the number of affected rows.
console.log(results);
});
var values = {
where: { symbol: 'xxx' },
};
Price
.findOne(values)
.then(function(price) {
console.log("found!!!!!");
console.log(price);
res.render('home/home.ejs', {
price: price
});
});
};
But I'm getting this error message:
db: [Circular] }
TypeError: db.query is not a function
How can I fix this?
I'm trying to use raw queries from sequelize in an express app. My folder structure is:
/
/index.js
/models/index.js
/models/price.js
/controllers/price.js
I want to use sequelize which I already define in /models/index.js from a controller.
This is /models/index.js:
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require('sequelize')
, sequelize = new Sequelize(process.env.MYSQL_DB, process.env.MYSQL_USER, process.env.MYSQL_PASSWORD, {
dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb'
port: 3306, // or 5432 (for postgres)
timezone:'America/Sao_Paulo',
});
sequelize
.authenticate()
.then(function(err) {
console.log('Connection has been established successfully.');
}, function (err) {
console.log('Unable to connect to the database:', err);
});
var db = {};
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
module.exports.db = db;
I want to use a raw query in my price controller:
exports.index = function(req, res, next) {
// var environment_hash = req.session.passport.user.environment_hash;
var Price = require('../models/index').Price;
var db = require('../models/index').db;
console.log(db);
db.query(`SELECT ... `).spread((results, metadata) => {
// Results will be an empty array and metadata will contain the number of affected rows.
console.log(results);
});
var values = {
where: { symbol: 'xxx' },
};
Price
.findOne(values)
.then(function(price) {
console.log("found!!!!!");
console.log(price);
res.render('home/home.ejs', {
price: price
});
});
};
But I'm getting this error message:
db: [Circular] }
TypeError: db.query is not a function
How can I fix this?
Share Improve this question asked Dec 7, 2017 at 1:53 Filipe FerminianoFilipe Ferminiano 8,81127 gold badges113 silver badges180 bronze badges 7-
Your calling query as a function... and passing in a string
SELECT ...
it looks like db isn't being imported correctly or doesn't have the property 'query' attached. – Daniel Tate Commented Dec 7, 2017 at 1:56 - In your index.js your db object needs a query function... otherwise what are you calling? If query is a function from sequelize then maybe you mean to say db.sequelize.query – Daniel Tate Commented Dec 7, 2017 at 1:57
-
You can fix it by making sure your
models/index
file is exporting a function nameddb
.module.exports.db = function () {...}
– Ryan Wheale Commented Dec 7, 2017 at 1:57 - I'm using sequelize lib which contains the query function: docs.sequelizejs./manual/tutorial/raw-queries.html – Filipe Ferminiano Commented Dec 7, 2017 at 1:58
- use db.sequelize.query instead of db.query If you look at your current code your attaching the library to the property sequelize not assigning it. – Daniel Tate Commented Dec 7, 2017 at 1:59
1 Answer
Reset to default 4The Sequelize library is being assigned to a variable on the db object.
The error is in the second file instead of calling
db.query
We should call
db.sequelize.query
In the first case we have called a function that does not exist. In another case we could assign the query function to a property on the db object.
db.query = db.sequelize.query
or you can de-structure using ES6
db.query = { query } = db.sequelize
Now we can run db.query
as expected.
本文标签: javascripterror on sequelize raw query query is not a functionStack Overflow
版权声明:本文标题:javascript - error on sequelize raw query: query is not a function - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745255156a2650054.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论