【发布时间】:2015-04-28 15:55:59
【问题描述】:
我最近使用Express 设置了node.js,并使用Jade 创建了一个简单的HTML 表单。表格是将数据插入PostgreSQL 数据库。问题是,当我在表单上按下提交时,所有内容都插入到数据库中,但HTML 表单只是挂起/徘徊,并且在某些时候它以No data received, ERR_EMPTY_RESPONSE 停止。有时它还会插入两次数据。我猜这是因为服务器端没有返回响应,但我看不到如何(我是node.js 的新手)。
表单有action="add_device",它被路由到routes/add_device.js。 add_device.js 看起来像这样:
var express = require('express');
var router = express.Router();
router.get('/', function(request, response, next) {
res.send('Nothing to see here. Move along.');
});
router.post('/', function(request, response, next) {
var db = require('../public/javascripts/db/insert');
var result = db.insertDevice(request, response);
return result;
});
module.exports = router;
我的db 模块中的insertDevice 函数如下所示(使用module.exports 导出):
// Insert new QA device. Data arriving as a request from a HTML form.
insertDevice: function (request, response) {
// Input that is verified in the HTML form.
// Convert to proper format for PostgreSQL query.
var name = '\'' + request.body.name + '\'';
var ip_address = '\'' + request.body.ip_address + '\'';
var os = '\'' + request.body.os + '\'';
// Input that needs to be verified. Prepare for PostgreSQL query.
var mac_address;
var os_version;
request.body.mac_address == "" ? mac_address = 'NULL' : mac_address = '\'' + request.body.mac_address + '\'';
request.body.os_version == "" ? os_version = 'NULL' : os_version = '\'' + request.body.os_version + '\'';
var pg = require('pg'); // PostgreSQL module.
var td = require('./table_data') // Database constants.
var client = new pg.Client(request.app.get('postgreConnection'));
client.connect(function(err) {
if (err) {
return console.error('Could not connect to postgres', err);
}
var QUERY = "INSERT INTO " + td.QA_DEVICES.TABLE_NAME + "(" +
td.QA_DEVICES.COLUMN_NAME + ", " +
td.QA_DEVICES.COLUMN_MAC_ADDRESS + ", " +
td.QA_DEVICES.COLUMN_IP_ADDRESS + ", " +
td.QA_DEVICES.COLUMN_OS + ", " +
td.QA_DEVICES.COLUMN_OS_VERSION + ") VALUES(" +
name + ", " +
mac_address + ", " +
ip_address + ", " +
os + ", " +
os_version + ");";
client.query(QUERY, function (err, result) {
if (err) {
return console.error('Error running query: ' + QUERY, err);
}
console.log('Query performed: ' + QUERY);
client.end();
});
});
}
“执行的查询” 始终记录到控制台并将数据插入数据库,但表单仍然挂起。我的问题是:
- 是服务器没有响应导致表单挂起吗?
- 如何将响应“发回”到前端?
- 前端插入数据库后是否可以路由到另一个页面?最佳做法是什么?
【问题讨论】:
标签: javascript html node.js postgresql