Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我得到了;sequelize.literal不是一个函数;续集_Javascript_Sequelize.js - Fatal编程技术网

Javascript 为什么我得到了;sequelize.literal不是一个函数;续集

Javascript 为什么我得到了;sequelize.literal不是一个函数;续集,javascript,sequelize.js,Javascript,Sequelize.js,我试图将我的项目克隆到新的PC上,然后我得到一个错误调用“sequelize.literal不是函数” 这是我的产品控制器。我试图通过使用文字函数来获得我的产品的平均等级 const Product = require("../models").product; module.exports = { getProduct: async (req, res) => { try { let query = {} query.where = { isPubl

我试图将我的项目克隆到新的PC上,然后我得到一个错误调用“sequelize.literal不是函数”

这是我的产品控制器。我试图通过使用文字函数来获得我的产品的平均等级

const Product = require("../models").product;

module.exports = {
getProduct: async (req, res) => {
  try {
    let query = {}
    query.where = {
        isPublished: 1
    };
    query.attributes = {
      include: [
        sequelize.literal(
          `(SELECT CAST(AVG(rating) AS DECIMAL(10,1)) FROM product_reviews WHERE productId = \`Product\`.\`id\`)`
        ),
        "avg_rating",
      ]
    }

    const product = await Product.findAll(query)

    res.send({
      status: 200,
      data: product,
    });

  } catch (error) {
    res.status(500).send({
      error: error.message,
    });
  }
},
}

为了结果

状态500&错误:“sequelize.literal不是函数”

这里是My package.json

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "dev": "nodemon app.js"
  },
  "author": "NuChaiyakorn",
  "license": "ISC",
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "body-parser": "^1.19.0",
    "cookie-session": "^1.4.0",
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "express-fileupload": "^1.1.7-alpha.3",
    "express-promise-router": "^3.0.3",
    "faker": "^4.1.0",
    "ffmpeg": "0.0.4",
    "joi": "^14.3.1",
    "jsonwebtoken": "^8.5.1",
    "morgan": "^1.10.0",
    "mysql2": "^2.1.0",
    "passport": "^0.4.1",
    "passport-jwt": "^4.0.0",
    "passport-local": "^1.0.0",
    "ramda": "^0.27.0",
    "randomstring": "^1.1.5",
    "sequelize": "^5.21.6",
    "slugify": "^1.4.0"
  }
}

您的
属性应如下所示-

query.attributes = [
  [sequelize.literal(`(SELECT CAST(AVG(rating) AS DECIMAL(10,1)) FROM product_reviews WHERE productId = \`Product\`.\`id\`)`), 'avg_rating']
];
您还需要指定响应中需要哪些额外属性以及
avg_rating

例如—

query.attributes = [
  'id',
  ['name','userName'],
  [sequelize.literal(`(SELECT CAST(AVG(rating) AS DECIMAL(10,1)) FROM product_reviews WHERE productId = \`Product\`.\`id\`)`), 'avg_rating']
];

我尝试使用
attributes
include
作为您使用的属性,但没有得到预期的响应

最后,我将这一行添加到控制器的顶部,从而解决了这个问题

const { sequelize } = require('../models/index')

你介意为我们分享一些代码吗,伙计?也许
package.json
也会更新。请参见上文。我相信在查询中使用literal已经被弃用,取而代之的是原始查询函数:我得到了相同的结果“sequelize.literal不是函数”我在我的旧笔记本电脑中使用此查询,我可以从中得到响应。仅当我将此项目克隆到新笔记本电脑时,才会发生此错误。