问题描述
通过post提交数据,然后node解析后,使用MongoDB插入到集合。
前端要怎么编码这些数据,然后再通过nodejs正确的解析出来?
问题出现的环境背景及自己尝试过哪些方法
使用的是axios进行post请求的,一开始在前端使用JSON.stringify()但是不行,nodejs解析出来是这样的:
data = [{'goodsId':1,'goodsName':'鸡米花','price':10}] ==> {'{'goodsId':1,'goodsName':'鸡米花','price':10}': ''}
nodejs解析后,把我的数据直接变成属性了……。
还试过直接post数据过去后端,但后端拿到的是[obejct object]
通过搜索后,我试了QS模块,使用了Qs.stringify(data),后端终于拿到数据了,但是只能拿一条。如果我试图在data里面添加多一个对象,它无法正确的解析2条数据,会把同样属性的叠加进去。我还是贴图和贴代码吧!
你期待的结果是什么?实际看到的错误信息又是什么?
nodejs代码
const express = require('express');
const app = express();
const fs = require('fs');
const bodyParser = require("body-parser");
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost:27017/";
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
//设置跨域访问
app.all('*',function(req,res,next) {
res.header('Access-Control-Allow-Origin', '*');
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
next();
})
//食物套餐请求
app.get('/foodmeal',function(req,res) {
//读取文件
fs.readFile('foodmeal.json',function(err,data){
if(err) return console.error(err);
//响应http请求
res.send(data);
});
});
//食物详情请求
app.get('/foods',function(req,res) {
//读取文件
fs.readFile('foods.json',function(err,data) {
if(err) return console.error(err);
res.send(data);
});
});
app.post("/settle_post", function (req, res) {
//在这里面来操作MongoDB数据库
MongoClient.connect(url,function(err,db) {
if(err) throw err;
//链接数据库
let dbo = db.db('foodmeal');
//要插入的数据
console.log(req.body);
let myobj = [req.body];
// console.log(myobj);
//链接集合,并且插入数据
dbo.collection('food').insertMany(myobj,function(err,res){
if(err) throw err;
console.log('插入了' + res.insertedCount);
db.close();
});
})
// console.log(req.body);
res.send();
});
app.listen(3000);
console.log('listening on port 3000...');
{ goodsId: '1',
goodsName: [ '香辣鸡腿堡', '田园鸡腿堡' ],
price: [ '18', '15' ],
count: [ '1,goodsId=2', '1' ] }
//这里是添加了两条数据后显示的解析出来的结果,只有goodsid没被叠加,但不管有没叠加,我希望的是两条数据,然后可以使用MongoDB进行插入
前端代码
let data = [];
//this.tableData ==>需要提交的数据
this.tableData.forEach((item,i) => {
data[i] = Qs.stringify(item);
});
// let data = Qs.stringify(this.tableData[0]);一条数据的话没问题
console.log(data);
axios({
url:'http://localhost:3000/settle_post',
method:'post',
data:data,
transformRequest: [function(data){
return data;
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
因为刚学的node没两天,有些东西不清楚,百度了各种方法还是未得结果,只能求助各位大佬啦!因为小弟知识比较单薄,如果还需要提供什么东西,请在评论里面提醒。谢谢
ps:(目前想到个很浪费的方法,循环数据,然后每条数据进行一次post请求- -)
提交
json
应该用application/json
而不是application/x-www-form-urlencoded
。application/x-www-form-urlencoded
会把json
数据转化为goodsId='1'&goodsName='香辣鸡腿堡,田园鸡腿堡'
放body
里面。