在 Sequelize 查询中调用过程导致两次。
return await sequelize.query('CALL get_products();', { type: sequelize.QueryTypes.SELECT});
//路由中
module.exports = (app) => {
let router = require('express').Router();
const verifyToken = require('../../middlewares/verifyToken');
const productController = require('../../controllers/api/productController');
router.get('/products', verifyToken, productController.getProducts);
router.get('/products/:productId', verifyToken, productController.getProduct);
app.use('/api', router);
};
//productController.js
const db = require('../../models');
const Product = db.products;
const sequelize = db.sequelize;
exports.getProducts = async (request, response) => {
let responseData = {};
let products = [];
// Get products
products = await sequelize.query('CALL get_products();')
.then(data => {
return data;
})
.catch(error => {
//
});
//-------------
// Set response data
if (products) {
responseData = {
status: true,
message: 'Products found.',
data: {
products: products
}
};
} else {
responseData = {
status: false,
message: 'Products not found.',
data: null
};
}
//------------------
return response.status(200).json(responseData);
即使删除了查询代码,console.log 也会在函数中触发两次。看起来这是我的代码错误。
最佳答案
错误在于同时具有 await
和 .then(...).catch(...)
。
您应该只使用这两种结构中的一种,具体取决于您的偏好。
在这里使用 .then().catch()
const db = require('../../models');
const Product = db.products;
const sequelize = db.sequelize;
exports.getProducts = (request, response) => {
let responseData = {};
let products = [];
// Get products
products = await sequelize.query('CALL get_products();').then(data => {
// Set response data
if (products) {
responseData = {
status: true,
message: 'Products found.',
data: {
products: products
}
};
} else {
responseData = {
status: false,
message: 'Products not found.',
data: null
};
}
}).catch(error => {
// handle any error
});
}
在这里等待
const db = require('../../models');
const Product = db.products;
const sequelize = db.sequelize;
exports.getProducts = async (request, response) => {
let responseData = {};
let products = [];
// Get products
products = await sequelize.query('CALL get_products();');
// Set response data
if (products) {
responseData = {
status: true,
message: 'Products found.',
data: {
products: products
}
};
} else {
responseData = {
status: false,
message: 'Products not found.',
data: null
};
}
}
我总是更喜欢使用
.then().catch()
语法,所以我真的不知道如何使用 await
模式处理任何错误。也许 try catch 可以做到。我希望这有帮助。
关于mysql - Sequelize 查询调用过程触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60223284/