javascript - Sequelize 类方法适用于一个模型,但不适用于另一个模型
问题描述
所以我正在为电子商务平台构建搜索功能。我决定编写 在类别模型和 产品模型中搜索查询匹配的类方法。这就是我的特快路线的样子。当我运行并尝试在此配置中搜索时,我收到 500 错误。
有了这个堆栈跟踪。当我像这样注释掉类别时,奇怪的事情就出现了。然后搜索功能工作得很好,但它只从产品模型中获取数据。如果我注释掉产品模型,类别类方法仍然不起作用。我尝试了 console.logging class.search 方法的结果,但我得到了未定义的结果。我的预感是急切的加载无法以某种方式工作...
路线
const router = require('express').Router()
const { Category, Product } = require('../db/models')
const checkAccess = require('./checkAccess')
const Sequelize = require('sequelize')
module.exports = router
router.get('/', async (req, res, next) => {
try {
const productResult = await Product.search(req.query.search)
const categoryResult = [] //await Category.search(req.query.search)
if (![...productResult, ...categoryResult].length) {
res.json([])
} else if (productResult.length && categoryResult.length) {
const foundProducts = [...productResult, ...categoryResult[0].products]
const foundProductsNoDuplicates = []
const setOfUniqueIds = new Set()
foundProducts.forEach(product => {
if (!setOfUniqueIds.has(product.id)) {
setOfUniqueIds.add(product.id)
foundProductsNoDuplicates.push(product)
}
})
res.json(foundProductsNoDuplicates)
} else if (productResult.length) {
res.json([...productResult])
} else {
res.json([...categoryResult[0].products])
}
} catch (err) {
next(err)
}
})
模型
'use strict'
const Sequelize = require('sequelize')
const db = require('../db')
const Category = require('./category')
const Product = db.define('product', {
name: {
type: Sequelize.STRING,
allowNull: false
},
inventory: {
type: Sequelize.INTEGER,
defaultValue: 0
},
price: {
type: Sequelize.DECIMAL(10, 2),
allowNull: false
},
imgUrl: {
type: Sequelize.STRING,
defaultValue: '../../images/default-product.jpg'
},
description: {
type: Sequelize.TEXT,
allowNull: false
},
status: {
type: Sequelize.ENUM('inStock', 'outOfStock', 'unavailable')
}
}, {
hooks: {
beforeCreate: product => {
if (product.imgUrl === '') {
product.imgUrl = '../../images/default-product.jpg'
}
}
}
})
Product.search = async function (query) {
const result = await this.findAll({
where: {
name: {
[Sequelize.Op.iLike]: '%' + query + '%'
},
status: 'inStock',
},
include: [{ model: Category }]
})
return result
}
module.exports = Product
'use strict'
const Sequelize = require('sequelize')
const db = require('../db')
const Product = require('./product')
const Category = db.define('category', {
name: {
type: Sequelize.STRING,
allowNull: false
},
description: {
type: Sequelize.TEXT,
allowNull: false
}
})
Category.search = function (query) {
return this.findAll({
where: {
name: {
[Sequelize.Op.iLike]: '%' + query + '%'
},
},
include: [Product],
})
}
module.exports = Category
解决方案
推荐阅读
- primefaces - org.primefaces.model.SelectableDataModel 启用选择时
- python - console_script 不能在可编辑模式下工作并给出 ModuleNotFoundError
- javascript - 如何使我的代码在性能方面更高效?
- r - 如何用这两个变量创建一个更简洁的表格?(R 编程)
- apache-flink - Flink 集成测试 S3
- python-3.x - Python Tkinter - 如何在窗格窗口中正确调整画布大小
- mongodb - 在文档mongoDB springboot中的对象列表中查找时间戳的最大值
- php - Google OAuth - 访问令牌和刷新令牌之间的区别
- json - Flutter 如何将地图从互联网 API 转换为列表?
- javascript - 如何阅读 nextjs 错误信息或定位错误