如何解决如何使用Node.js在MySQL中的发布请求之后插入数组项
是一个新的Web开发,很难插入存储在我的nodejs应用程序数组中的项目。我有一个收集我的结帐页面信息的数组。我想在数据库中插入所有值,但是问题是当数组中有更多来自检出页面的项无法插入时,因为数据库中无法识别其他列。
下面是我要用于在数据库中插入数据的代码。我想将prodDetails中的所有内容都插入数据库中,再次可以增加数据或减少数据
var express = require('express');
var mysql = require('mysql');
var bodyParser = require("body-parser");
app.set("view engine","ejs");
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + "/public"));
app.use(bodyParser.json());
var connection = mysql.createConnection({
host : '',user : '',password : '',database : ''
});
//router to post
app.post('/create',function(req,res,next) {
// store all the products in product details
const prodDetails=req.body;
console.log(prodDetails);
//var txt = JSON.stringify(prodDetails);
// insert product data into all products table
var sql = 'INSERT INTO allproducts SET ?';
db.query(sql,prodDetails,function (err,data) {
if (err) throw err; //if sql error throw
console.log(prodDetails);
console.log("Product added data is inserted in instock table successfully ");
});
res.redirect('/checkout'); //
});
下面是我的控制台中的输出,它是如何通过使用console.log(prodDetails);上的上述代码从检出页面ejs文件中获取值的结果,该文件从ejs中打印出值之后。
{ cmd: '_cart',upload: '1',business: 'seller@deotos.com',quantity_1: '1',item_name_1: 'Cable 3',amount_1: '12.00',quantity_2: '1',item_name_2: 'iPad white',amount_2: '300.00',quantity_3: '1',item_name_3: 'Cable 1',amount_3: '3.00',quantity_4: '1',item_name_4: 'SD Card 16GB',amount_4: '20.00',customername: 'Johnson',customerphone: '876654',customeremail: 'Jaqueleen@gm.org',customeraddress: 'London' }
和下面是我的sql表,它有12行,问题是当一个人订购了12个以上的项目时,我该如何实现这一点,以便在定数量后,它应该开始为prodDetails中的所有项目写在另一行上>
create table allproducts (
id INT(50) NOT NULL AUTO_INCREMENT PRIMARY KEY,cmd VARCHAR(255),upload INT(50),business varchar(255),quantity_1 INT(50),item_name VARCHAR(255),amount INT(30),customername VARCHAR(255),customerphone VARCHAR(25),customeremail VARCHAR(25),customeraddress VARCHAR(25),date TIMESTAMP DEFAULT NOW()
);
+-----------------+--------------+------+-----+-------------------+
| Field | Type | Null | Key | Default |
+-----------------+--------------+------+-----+-------------------+
| id | int(50) | NO | PRI | NULL |
| cmd | varchar(255) | YES | | NULL |
| upload | int(50) | YES | | NULL |
| business | varchar(255) | YES | | NULL |
| quantity_1 | int(50) | YES | | NULL |
| item_name | varchar(255) | YES | | NULL |
| amount | int(30) | YES | | NULL |
| customername | varchar(255) | YES | | NULL |
| customerphone | varchar(25) | YES | | NULL |
| customeremail | varchar(25) | YES | | NULL |
| customeraddress | varchar(25) | YES | | NULL |
| date | timestamp | NO | | CURRENT_TIMESTAMP |
+-----------------+--------------+------+-----+-------------------+
12 rows in set (0.00 sec)
感谢您的时间
解决方法
我建议您跨表拆分数据,并通过使用外键链接它们。为每个项目在多行中重复客户信息违反了第二范式(2NF)。您可以在此处阅读有关数据库规范化规则及其重要性的更多信息:
https://www.guru99.com/database-normalization.html
在您的情况下,您可以将数据组织到Customer
,Order
,Product
和Order_Product
表中。您的结构的伪代码可能如下所示:
Customer {
customer_id int PK,customer_name varchar,customer_email varchar
}
Order {
order_id int PK,customer_id int FK REF Customer,order_date timestamp
}
Order_Product {
order_product_id int PK,order_id FK REF Order,product_id FK REF Product,product_quantity
}
Product {
product_id int PK,product_name varchar,product_cost float
}
,
我建议将POST数据的格式调整为:
<style>
.center {
margin: auto;
width: 50%;
border: 3px solid green;
padding: 10px;
}
.my-inputs {
display: flex;
justify-content: space-between;
}
</style>
<div class="my-inputs">
<input type="text" name='title' placeholder='Food title'/>
<input type="text" name='q' placeholder='Search Image'/>
<input type="submit" value='Search!'/>
</div>
{
cmd: '_cart',upload: '1',business: 'seller@deotos.com',items: [
{
quantity_1: '1',item_name: 'Cable 3',amount: '12.00'
},{
quantity_1: '1',item_name: 'iPad white',amount: '300.00'
},item_name: 'Cable 1',amount: '3.00'
},{
quantity_1: '1',item_name: 'SD Card 16GB',amount: '20.00'
}
],customername: 'Johnson',customerphone: '876654',customeremail: 'Jaqueleen@gm.org',customeraddress: 'London'
}
的命名对我来说似乎很奇怪,我建议将列名更改为quantity_1
。
然后您可以遍历项目`以插入订单。这样应该可以解决您当前的问题,并将数据输入数据库。
请注意,应该按照@Jakob K的建议,采取其他步骤来完善数据库结构
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。