簡體   English   中英

sequelize 原始查詢錯誤:查詢不是函數

[英]error on sequelize raw query: query is not a function

我正在嘗試在快速應用程序中使用來自 sequelize 的原始查詢。 我的文件夾結構是:

/
/index.js
/models/index.js
/models/price.js
/controllers/price.js

我想使用我已經在 /models/index.js 中從控制器定義的 sequelize。

這是/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;

我想在我的價格控制器中使用原始查詢:

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

但我收到此錯誤消息:

db: [Circular] }
TypeError: db.query is not a function

我怎樣才能解決這個問題?

Sequelize 庫被分配給 db 對象上的一個變量。

錯誤在第二個文件中而不是調用

db.query

我們應該打電話

db.serialize.query

在第一種情況下,我們調用了一個不存在的函數。 在另一種情況下,我們可以將查詢函數分配給 db 對象上的一個屬性。

db.query = db.serialize.query

或者你可以使用 ES6 解構

db.query = { query } = db.serialize

現在我們可以按預期運行db.query

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM