如何使用令牌(后)与node.js的Mysql?

我是一个新手程序员。 我一直在做一个非常小的网站。 我遇到了一点错误。 我find了一些解决scheme。 但是我还没有答复。

如果你不介意,请给我你的touhgt。 T ^ T

我使用Mysql连接了node.js。 'GET'运行没有任何问题。 但'POST'部分无法获取我在网页上input的一些数据。

我想知道的是为什么'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:在callback函数(/)中,无法读取app.get.fs.readFile.client.query.response.send.ejs.render.data(/home/han/app.js:46:9)处未定义的属性'name' (/ home / han / node_modules / express / lib / router / index.js:164:37)at param(/home/han/node_modules/express/lib/router/index.js:138:11)at pass (/home/han/node_modules/express/lib/router/index.js:173:5)在Object.router(/ ha / node_modules / express / lib / router / index.js:145:5) 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/node_modules/connect/lib/proto.js:193:15)(作为句柄)(/home/han/node_modules/express/lib/middleware.js:30:5)在Object.query [as handle](/home/han/node_modules/express/node_modules/connect/lib/middleware/query.js:45:5)

当我尝试将数组值更改为'value'app.post('/ insert')部分时,网页显示为'value'。

错误在于request.body是未定义的。 它没有定义,因为你没有configurationExpress来parsing主体。 为此,您需要安装模块body-parser

 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('/'); }); }); 

在这个部分:

 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.paramsreplacerequest.body用法。 当使用forms + post时,节点会将这些字段解释为请求对象上的参数。