node.js - 使用 node.js express 和 reactjs 将数据插入 phpmyadmin
问题描述
我的数据库中有一个名为 products 的表,我正在尝试使用 node.js express 服务器作为 Web 服务并将 react.js 作为前端语言插入。
下面是我的 react.js 表单来执行插入。
function App() {
return (
<div className="container">
<form onSubmit = {(e) => Add(e)}>
<div className="form-group">
<label htmlFor="examplePname">Name</label>
<input type="text" className="form-control" id="examplePname" aria-describedby=""/>
</div>
<div className="form-group">
<label htmlFor="examplePprice">Price</label>
<input type="number" className="form-control" id="examplePprice"/>
</div>
<div className="form-group form-check">
<input type="checkbox" className="form-check-input" id="exampleCheck1"/>
<label className="form-check-label" htmlFor="exampleCheck1">Check me out</label>
</div>
<button type="submit" className="btn btn-primary">Submit</button>
</form>
</div>
);
}
function Add(e){
e.preventDefault();
let request = {
name: document.getElementById('examplePname').value,
price: document.getElementById('examplePprice').value,
}
alert("returns this:"+ request)
axios.post('http://localhost:3000/add', request)
.then(resp => {
alert(resp.data.message);
})
.catch(err => {
console.log(err);
})
}
下面是我的 node.js express Webservice
router.post('/add', (req, res) => {
const {name, price} = req.query;
console.log(name, price); ///Do this before you write the insert query
//res.send('adding product');Do this before you write the insert query (add temp products to view in cmd)
const INSERT_QUERY = `INSERT INTO products (name, price) VALUES('${name}', ${price})`; //after do an insert query to add to db proper
connection.query(INSERT_QUERY, (err, results) => {
if (err) {
return res.send({
message: "failed"
})
} else {
return res.send({
message: "successful"
});
}
});
});
但是当我插入时,我在 console.log 中得到了名称和价格的未定义值。
解决方案
在节点端的 app.js 中使用下面的代码来解析参数
const bodyparser = require('body-parser');
const multer = require('multer');
//Multer
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './Images');
},
filename: function (req, file, cb) {
let fileType = file.originalname.split('.');
cb(null, `${fileType[0]}_${Date.now()}.${fileType[1]}`);
}
})
var upload = multer({ storage: storage });
app.use(upload.any());
// Parse
app.use(bodyparser.json({ limit: '50mb', extended: true }));
app.use(bodyparser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 1000000 }));
重启服务器前请安装以上依赖
反应端发送表单数据如下
createFormData(props) {
var formData = new FormData();
for (var key in props) {
if (typeof props[key] === "string" || props[key] instanceof Date) {
formData.append(key, props[key]);
}
else if (typeof props[key] === "object") {
if (Array.isArray(props[key]) && key === "file") {
//Multiple File Upload
props[key].length > 0 && props[key].forEach((element) => {
if (element.lastModifiedDate) {
formData.append(key, element);
}
})
}
else if (props[key] && props[key].lastModifiedDate) {
//Single File Upload
formData.append(key, props[key]);
} else {
formData.append(key, JSON.stringify(props[key]));
}
} else {
formData.append(key, JSON.stringify(props[key]));
}
}
return formData;
}
// axios 请求
axios({
url: url here,
method: 'POST',
data: this.createFormData(your form data object),
timeout: 30000
}).then(response => {
if (response.status === 200) {
}
})
您将在节点端获得如下数据
let data = { ...req.body, ...req.params, ...req.query }
推荐阅读
- javascript - php联系表单在单击提交按钮时没有响应
- python - 在 Python 中并行化列表推导
- python-3.x - 我可以将 python 3.7 代码转换为较低版本吗?
- javascript - 在反应中创建表单的最佳方法是什么?
- apache-kafka - 有没有办法在不使用 Message 键的情况下将消息发布到 kafka 中的特定分区?
- sql - 比较 SQL 案例语句中的 3 个变量
- c# - 如何在 .Net core 2.1 的渐进式 Web 应用程序中存储数据?
- javascript - 使用 vis.js 从 json 文件中填充节点和链接
- android - 如何在应用更新中为 android 配置灵活或立即发布?
- python - 有没有办法通过只知道href来点击按钮?没有 id 或 value 可以清楚地区分。在 python 中使用 Selenium