【发布时间】:2015-10-23 07:48:41
【问题描述】:
我正在编写一个 nodejs 网络服务,它将接受 JSON 并使用 (https://github.com/felixge/node-mysql) 将其输入到 mysql 表中。
如果没有数据传递给我的服务并且没有超时,我的服务工作正常(所以基本上应用程序会继续运行,但是只要我发送带有 JSON 数据的请求,然后将数据输入到 mysql 表中。一旦那个完成后,节点应用程序在空闲时间后被杀死,并出现以下错误
Error: Connection lost: The server closed the connection.
at Protocol.end (/home/user/sqlconnector/node_modules/mysql/lib/protocol/Protocol.js:103:13)
at Socket. (/home/user/sqlconnector/node_modules/mysql/lib/Connection.js:102:28)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
我正在寻找一种优雅的方式来在完成处理时退出 sql 连接但不杀死 nodejs 应用程序。 我可以通过使用像 forever 这样的东西在崩溃时重新启动应用程序来解决它,但我想了解的是它们在代码中的一个根本错误......
这是我插入数据的代码的 sn-p...
var express = require('express');
var bodyParser = require('body-parser');
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'xxxx',
user : 'xxx',
password : 'xxxx',
database : 'test'
});
var app = express();
// set our port
var port = process.env.PORT || 3000;
// parse application/json
app.use(bodyParser.json())
// get an instance of the express Router
var router = express.Router();
// POST / gets json data
router.post('/', function(req, res) {
var data = req.body[0].record;
// INSERT INTO posts SET `name` = 'hello', `name2` = 'hello2'
// inserting data into the parent level form
var query = connection.query('INSERT INTO '+ tablename +' SET ?', data, function(err, result) {
if (err) throw err;
console.log(result.insertId);
});
console.log("Parent \n" + query.sql);
res.send("Post Received: statusCode:" + res.statusCode);
});
app.use('/api', router);
// START THE SERVER
app.listen(port);
console.log('Magic happens on port ' + port);
【问题讨论】: