连续两次触发查询调用过程

时间:2020-02-14 09:16:28

标签: 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在函数中也会触发两次。看起来这是我的代码错误。

1 个答案:

答案 0 :(得分:0)

错误在于同时拥有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模式处理任何错误。也许可以尝试一下。我希望这有帮助。