我是一名新手程序员。我一直在制作一个非常小的网站。我遇到了一点错误。我找到了一些解决方案。但我还没有得到答案。
如果你不介意,请告诉我你的想法。 T ^ T
我将node.js与Mysql连接起来。 ' GET'正在运行没有任何问题。但是' POST'部分无法获取我在网页上输入的数据。
我想知道的是为什么' POST'没有数据。
var fs = require('fs');
var ejs = require('ejs');
var http = require('http');
var mysql = require('mysql');
var express = require('express');
var client = mysql.createConnection({
user: 'root',
password: 'PASSWORD',
database: 'Company'
});
var app = express();
http.createServer(app).listen(8080, function(){
console.log('Server running at http://127.0.0.1:8080');
});
app.get('/', function(request, response) {
fs.readFile('list.html', 'utf8', function(error, data) {
client.query('SELECT * FROM products', function (error, results) {
response.send(ejs.render(data, {
data: results
}));
});
});
});
app.get('/delete/:id', function(request, response) {
client.query('DELETE FROM products WHERE id=?', [request.param('id')], function() {
response.redirect('/');
});
});
app.get('/insert', function(request, response) {
fs.readFile('insert.html', 'utf8', function (error, data) {
response.send(data);
});
});
app.post('/insert', function(request, response) {
var body = request.body;
client.query('INSERT INTO products (name, modelnumber, series) VALUES (?, ?, ?)'[
body.name, body.modelnumber, body.series
], function() {
response.redirect('/');
});
});
app.get('/edit/:id', function(request, response) {
fs.readFile('edit.html', 'utf8', function(error, data) {
client.query('SELECT * FROM products WHERE id = ?', [
request.param('id')
], function(error, result) {
response.send(ejs.render(data, {
data: result[0]
}));
});
});
});
app.post('/edit/:id', function(request, response) {
var body = request.body;
client.query('UPDATE products SET name=?, modelnumber=?, series=? WHERE id=?', [
body.name, body.modelnumber, body.series, request.param('id')
], function() {
response.redirect('/');
});
});
错误消息
TypeError:无法读取属性' name'未定义的 在app.get.fs.readFile.client.query.response.send.ejs.render.data(home/han/app.js:46:9) 在回调(/home/han/node_modules/express/lib/router/index.js:164:37) 在param(/home/han/node_modules/express/lib/router/index.js:138:11) 在通过(/home/han/node_modules/express/lib/router/index.js:145:5) 在Router._dispatch(/home/han/node_modules/express/lib/router/index.js:173:5) 在Object.router(/home/han/node_modules/express/lib/router/index.js:33:10) 在下一个(/home/han/node_modules/express/node_modules/connect/lib/proto.js:193:15) 在Object.expressInit [作为句柄](/home/han/node_modules/express/lib/middleware.js:30:5) 在下一个(/home/han/node_modules/express/node_modules/connect/lib/proto.js:193:15) 在Object.query [作为句柄](/home/han/node_modules/express/node_modules/connect/lib/middleware/query.js:45:5)
当我尝试将数组值更改为' value' app.post(' / insert')部分,网页显示了'值'。
答案 0 :(得分:1)
错误是request.body未定义。它未定义,因为您尚未将Express配置为解析正文。为此,您需要安装模块正文解析器
npm install body-parser
接下来,需要在代码中进行正文解析
var bodyParser = require('body-parser')
在初始化Express之后将其设置为中间件。
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
您的request.body现在应该等于表单。
EDIT1:
尝试使用此插入查询
app.post('/insert', function(request, response) {
var body = request.body;
var product = {
name: body.name,
modelnumber: body.modelnumber,
series: body.series
}
client.query('INSERT INTO products SET ?', product, function() {
response.redirect('/');
});
});
答案 1 :(得分:0)
在本节中:
app.post('/insert', function(request, response) {
var body = request.body;
client.query('INSERT INTO products (name, modelnumber, series) VALUES (?, ?, ?)'[
body.name, body.modelnumber, body.series
], function() {
response.redirect('/');
});
});
尝试将request.body
的使用替换为request.params
。
当使用表单+帖子时,节点会将字段解释为请求对象上的参数。