首页 > 解决方案 > 将数据发送到 MySQL 数据库的 React/Node 错误

问题描述

我的 Node/React 应用程序有一个复杂的问题。我有一个购物车,结帐时的最后一个元素是将订单详细信息添加到我的 MySQL 数据库,但是我的函数从控制器返回错误。我正在发布相关代码,完整的代码对于帖子来说太广泛了。

这是节点路线:

module.exports = function(app) {
  var controller = require('../controllers/controller');

  // controller Routes
  app.route('/products')
    .get(controller.list_all_products)
    .post(controller.create_a_product);
    app.route('/products/:product_type')
    .get(controller.products_by_type);
   app.route('/product/:productId')
    .get(controller.read_a_product)
    .put(controller.update_a_product)
    .delete(controller.delete_a_product);
};

这是控制器的相关部分:

exports.create_a_product = function(req, res) {
  var new_product = new Product(req.body);

  //handles null error 
   if(!new_product.product || !new_product.status){
        res.status(400).send({ error:true, message: 'Please provide product/status' });
    } else {
  Product.createProduct(new_product, function(err, product) {
    
    if (err)
      res.send(err);
    res.json(product);
  });
}
};

模型的相关部分:

var Product = function(product){
    this.product = product.product;
    this.status = Product.status;
    this.created_at = new Date();
};
Product.createProduct = function (newProduct, result) {    
    sql.query("INSERT INTO orders set ?", newProduct, function (err, res) {
        if(err) {
            console.log("error: ", err);
            result(err, null);
        }
        else{
            console.log(res.insertId);
            result(null, res.insertId);
        }
    });           
};

然后 React 端使用这个 api 调用:

import $ from 'jquery'

export const addOrder = order => {
    const urlString = "http://localhost:9000/products"
    return $.ajax({
        url: urlString,
        method: "POST",
        data: order,
        success: () => {
            console.log('order logged')
        },
        error: (status, err) => {
            console.log(status)
        }
    })
  }

最后我用这个 var 进行调用:

 var r = await addOrder(this.state.order).then(res => res.json())

订单详情是一个简单的对象:

this.state = {
            order: {
                oid: '',
                order_date: '',
                products: '',
                first_name: '',
                last_name: '',
                email: '',
                address: '',
                city: '',
                province: '',
                zip: '',
                country: ''
            }
        }

执行时,我从控制器收到错误“请提供产品/状态”。

我知道这是一个艰难的过程,非常感谢任何帮助。

标签: javascriptnode.jsreactjs

解决方案


在我看来,您将订单对象发送到可能包含多个产品的产品服务。您应该从订单对象 (req.body) 中提取产品并将它们发送到循环中的 createProduct 方法。


推荐阅读