使用 bodyparser、Node.js 和 sqlite3 将站点表单中的数据插入数据库时出现问题
Problem with inserting data from a form on the site into the database using bodyparser, Node.js and sqlite3
我是 Node.js 和 SQLite 的新手,现在我正在尝试制作一个表单以从站点发送数据并将其传输到数据库,但我收到以下错误:
TypeError: Cannot read property 'ghostName' of undefined
at /home/user/server/index.js:23:29
at Layer.handle [as handle_request] (/home/user/server/node_modules/express/lib/router/layer.js:95:5)
at next (/home/user/server/node_modules/express/lib/router/route.js:137:13)
at /home/user/server/node_modules/body-parser/lib/read.js:130:5
at invokeCallback (/home/user/server/node_modules/raw-body/index.js:224:16)
at done (/home/user/server/node_modules/raw-body/index.js:213:7)
at IncomingMessage.onEnd (/home/user/server/node_modules/raw-body/index.js:273:7)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1220:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
这里是代码本身:
index.js
const express = require('express');
const Parser = require('body-parser');
const { request } = require('express');
const sqlite3 = require('sqlite3').verbose();
const server = express();
let path_services = ( __dirname + '/public/static/img/services/' );
let path_html = ( __dirname + '/public/index.html' );
let path_font = ( __dirname + '/public/static/font/' );
let path_css = ( __dirname + '/public/static/css/' );
let path_img = ( __dirname + '/public/static/img/' );
let path_js = ( __dirname + '/public/static/js/' );
let path_db = ( __dirname + '/data.db' );
const Body_Parser = Parser.urlencoded({extended: false});
server.get('/', Body_Parser , function(req, res) {
res.sendFile(path_html);
});
server.post('/', Body_Parser, function(req, res) {
let name = request.body.ghostName;
console.log(name);
let surname = request.body.ghostSurname;
let email = request.body.ghostEmail;
let phone = request.body.ghostPhone;
let message = request.body.ghostMessage;
let db = new sqlite3.Database(path_db, sqlite3.OPEN_READWRITE, (err) => {
if(err) {
console.error(err.message);
}
console.log('Connected to Database!');
});
db.run('INSERT INTO client(name) VALUES(?)', [name, surname, email, phone, message], function(err) {
if(err) {
console.log(err.message);
}
console.log('Good!');
});
db.close();
});
server.use(express.static (path_services) );
server.use(express.static (path_font) );
server.use(express.static (path_css) );
server.use(express.static (path_img) );
server.use(express.static (path_js) );
server.listen(8000);
Html-来自:
<form action="/" method="post">
<input type="text" name="ghostName" class="contacts__name">
<input type="text" name="ghostSurname" class="contacts__surname">
<input type="email" name="ghostEmail" class="contacts__email">
<input type="text" name="ghostPhone" class="contacts__phone">
<input type="text" name="ghostMessage" class="contacts_message">
<input type="submit" value="" class="contacts_button">
</form>
如果有人解释错误原因,我将不胜感激。现在我正在尝试理解 SQLite,但由于这个错误,进程进展缓慢。
server.post('/', Body_Parser, function(req, res) {
let name = request.body.ghostName;
您正在访问一个名为 request
的变量(它确实存在),但您应该访问 req
,这是与 request[= 关联的请求对象29=](“页面加载”)由用户 当前正在处理。
request
是路由处理程序之外的变量,它在您的示例中不会更改并且没有 .body
属性,即使有,它也不会包含表单值。
req
,函数的参数之一,对于每个请求都是唯一的(就像 res
一样)并且因为你添加了一个主体解析器,包含一个 .body
属性(除了常规的 .query
、.header
等)。
我是 Node.js 和 SQLite 的新手,现在我正在尝试制作一个表单以从站点发送数据并将其传输到数据库,但我收到以下错误:
TypeError: Cannot read property 'ghostName' of undefined
at /home/user/server/index.js:23:29
at Layer.handle [as handle_request] (/home/user/server/node_modules/express/lib/router/layer.js:95:5)
at next (/home/user/server/node_modules/express/lib/router/route.js:137:13)
at /home/user/server/node_modules/body-parser/lib/read.js:130:5
at invokeCallback (/home/user/server/node_modules/raw-body/index.js:224:16)
at done (/home/user/server/node_modules/raw-body/index.js:213:7)
at IncomingMessage.onEnd (/home/user/server/node_modules/raw-body/index.js:273:7)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1220:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
这里是代码本身:
index.js
const express = require('express');
const Parser = require('body-parser');
const { request } = require('express');
const sqlite3 = require('sqlite3').verbose();
const server = express();
let path_services = ( __dirname + '/public/static/img/services/' );
let path_html = ( __dirname + '/public/index.html' );
let path_font = ( __dirname + '/public/static/font/' );
let path_css = ( __dirname + '/public/static/css/' );
let path_img = ( __dirname + '/public/static/img/' );
let path_js = ( __dirname + '/public/static/js/' );
let path_db = ( __dirname + '/data.db' );
const Body_Parser = Parser.urlencoded({extended: false});
server.get('/', Body_Parser , function(req, res) {
res.sendFile(path_html);
});
server.post('/', Body_Parser, function(req, res) {
let name = request.body.ghostName;
console.log(name);
let surname = request.body.ghostSurname;
let email = request.body.ghostEmail;
let phone = request.body.ghostPhone;
let message = request.body.ghostMessage;
let db = new sqlite3.Database(path_db, sqlite3.OPEN_READWRITE, (err) => {
if(err) {
console.error(err.message);
}
console.log('Connected to Database!');
});
db.run('INSERT INTO client(name) VALUES(?)', [name, surname, email, phone, message], function(err) {
if(err) {
console.log(err.message);
}
console.log('Good!');
});
db.close();
});
server.use(express.static (path_services) );
server.use(express.static (path_font) );
server.use(express.static (path_css) );
server.use(express.static (path_img) );
server.use(express.static (path_js) );
server.listen(8000);
Html-来自:
<form action="/" method="post">
<input type="text" name="ghostName" class="contacts__name">
<input type="text" name="ghostSurname" class="contacts__surname">
<input type="email" name="ghostEmail" class="contacts__email">
<input type="text" name="ghostPhone" class="contacts__phone">
<input type="text" name="ghostMessage" class="contacts_message">
<input type="submit" value="" class="contacts_button">
</form>
如果有人解释错误原因,我将不胜感激。现在我正在尝试理解 SQLite,但由于这个错误,进程进展缓慢。
server.post('/', Body_Parser, function(req, res) { let name = request.body.ghostName;
您正在访问一个名为 request
的变量(它确实存在),但您应该访问 req
,这是与 request[= 关联的请求对象29=](“页面加载”)由用户 当前正在处理。
request
是路由处理程序之外的变量,它在您的示例中不会更改并且没有 .body
属性,即使有,它也不会包含表单值。
req
,函数的参数之一,对于每个请求都是唯一的(就像 res
一样)并且因为你添加了一个主体解析器,包含一个 .body
属性(除了常规的 .query
、.header
等)。