mysql - Sequelize 查询调用过程触发两次

标签 mysql node.js sequelize.js

在 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/

相关文章:

javascript - 在模型验证中获取 this.id 返回 undefined

mysql - 尝试添加新的数据库连接时出现错误 "Could not load file or assembly MySql.data"

php - 检查表 A 中的特定条目是否存在于表 B 中,如果存在,则忽略这些值

node.js - 如何在 Node.js Jade 中显示今天的日期?

javascript - 如何使用 jQuery、JavaScript 和 AJAX 选择表格行数据并将其发送到编辑模式以更新数据?

node.js - NodeJS在声明Sequelize 6多对多关联模型时相互导入文件

mysql - 在 mySQL 中删除级联

php - 无法在运行 mysql 5.6 的 wamp 上启用 MySql 通用查询日志文件

node.js - 如何通过 Fitness REST API 从 Google 健身商店获取每日步数和活跃卡路里

postgresql - TypeError : s. 替换不是函数