Javascript 为什么我得到了;sequelize.literal不是一个函数;续集
我试图将我的项目克隆到新的PC上,然后我得到一个错误调用“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
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不是函数”我在我的旧笔记本电脑中使用此查询,我可以从中得到响应。仅当我将此项目克隆到新笔记本电脑时,才会发生此错误。