我的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: ''
}
}
当执行时,我从控制器得到错误'Please provide/status'。
我知道这是一个艰难的一个,任何帮助都是非常感激的。
在我看来,您将order对象发送到products服务,该服务可能包含多个产品。您应该从order对象(req.body)中提取产品,并在循环中将它们发送给createProduct方法。