Node.js 服务器在某些请求后未返回响应
Node.js server not returning response after certain requests
最近我开发了一个休息 api 使用 nodejs、express 、https 和 mysql 来生产。这在开始时工作良好,但两到三天后我开始抱怨服务器没有响应并且请求返回大部分时间超时。
基本上在一定数量的请求后,我的 node.js 应用程序停止响应 requests.I 甚至看到在我的控制台上触发的路由和来自我的客户端的 HTTP 调用(Android 应用程序)重新启动我的 node.js 应用程序服务器后,所有 them.But 都到达服务器,一切都重新开始工作,直到事情不可避免地再次停止。该应用程序永远不会崩溃,它只是停止响应请求。
我没有收到任何错误,而且我已确保处理并记录所有数据库连接错误,所以我不确定从哪里开始。
我的数据库连接代码在这里:
// call the packages we need
var mysql = require('mysql'); //call mysql for db connection
// configure the function to connect to the database
var connection = mysql.createConnection({
connectionLimit : 1000,
host : 'localhost',
user : 'test',
password : 'abcdefghi',
socketPath : '/var/run/mysqld/mysqld.sock'
});
exports.connection = connection;
我的数据库查询代码在这里:
var db = require('../dbconnection');
var getPostId = function(id,callback){
var sql = "SELECT post_id FROM posts.post_feeds WHERE id=?";
db.connection.query(sql,[id],callback);
}
我的应用服务器代码:
const fs = require('fs');
const https = require('https');
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const getData = require('./dbhandler/getData');
router.route('/postids/')
.post(function(req,res){
var success;
try {
var categoryId = req.body.categoryId;
getData.getPostId(categoryId,function(error, results, fields){
if (!error){
success = 1;
datasets = [];
db = {}
for (var i = 0 ; i < results.length; i++) {
db = {
"postId" : results[i]['post_id']
}
datasets.push(db);
}
res.json({"success" : success, "datasets" : datasets});
} else{
logger.error("Route = /postfeedsbycategory/, error = "+error);
success = 0;
res.json({"success" : success});
}
});
} catch(error){
logger.error("Route = /postfeedsbycategory/, error = "+error);
success = 0;
res.json({"success" : success});
}
});
app.use('/api/v2', router);
app.listen(port);
关于可能发生的事情以及我如何解决这个问题的任何线索?
这是我的堆栈:
Node.js 在带有 Ubutnu 14.04 和 Nginx 的 Digital Ocean 服务器上(使用 Express 4.15.2 + PM2 2.4.6)数据库 运行 MySQL(使用 node-mysql)
最好使用连接池:
var mysql = require('mysql');
// configure the function to connect to the database
var pool = mysql.createPool({
connectionLimit : 1000,
host : 'localhost',
user : 'test',
password : 'abcdefghi',
socketPath : '/var/run/mysqld/mysqld.sock'
});
exports.pool = pool;
在您的查询代码中:
var db = require('../dbconnection');
var getPostId = function(id,callback) {
var sql = "SELECT post_id FROM posts.post_feeds WHERE id=?";
db.pool.query(sql,[id],callback);
}
作为风格点,在处理结果时执行以下操作:
let datasets = results.map( result => { "postId": result['post_id'] });
最近我开发了一个休息 api 使用 nodejs、express 、https 和 mysql 来生产。这在开始时工作良好,但两到三天后我开始抱怨服务器没有响应并且请求返回大部分时间超时。
基本上在一定数量的请求后,我的 node.js 应用程序停止响应 requests.I 甚至看到在我的控制台上触发的路由和来自我的客户端的 HTTP 调用(Android 应用程序)重新启动我的 node.js 应用程序服务器后,所有 them.But 都到达服务器,一切都重新开始工作,直到事情不可避免地再次停止。该应用程序永远不会崩溃,它只是停止响应请求。
我没有收到任何错误,而且我已确保处理并记录所有数据库连接错误,所以我不确定从哪里开始。
我的数据库连接代码在这里:
// call the packages we need
var mysql = require('mysql'); //call mysql for db connection
// configure the function to connect to the database
var connection = mysql.createConnection({
connectionLimit : 1000,
host : 'localhost',
user : 'test',
password : 'abcdefghi',
socketPath : '/var/run/mysqld/mysqld.sock'
});
exports.connection = connection;
我的数据库查询代码在这里:
var db = require('../dbconnection');
var getPostId = function(id,callback){
var sql = "SELECT post_id FROM posts.post_feeds WHERE id=?";
db.connection.query(sql,[id],callback);
}
我的应用服务器代码:
const fs = require('fs');
const https = require('https');
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const getData = require('./dbhandler/getData');
router.route('/postids/')
.post(function(req,res){
var success;
try {
var categoryId = req.body.categoryId;
getData.getPostId(categoryId,function(error, results, fields){
if (!error){
success = 1;
datasets = [];
db = {}
for (var i = 0 ; i < results.length; i++) {
db = {
"postId" : results[i]['post_id']
}
datasets.push(db);
}
res.json({"success" : success, "datasets" : datasets});
} else{
logger.error("Route = /postfeedsbycategory/, error = "+error);
success = 0;
res.json({"success" : success});
}
});
} catch(error){
logger.error("Route = /postfeedsbycategory/, error = "+error);
success = 0;
res.json({"success" : success});
}
});
app.use('/api/v2', router);
app.listen(port);
关于可能发生的事情以及我如何解决这个问题的任何线索?
这是我的堆栈:
Node.js 在带有 Ubutnu 14.04 和 Nginx 的 Digital Ocean 服务器上(使用 Express 4.15.2 + PM2 2.4.6)数据库 运行 MySQL(使用 node-mysql)
最好使用连接池:
var mysql = require('mysql');
// configure the function to connect to the database
var pool = mysql.createPool({
connectionLimit : 1000,
host : 'localhost',
user : 'test',
password : 'abcdefghi',
socketPath : '/var/run/mysqld/mysqld.sock'
});
exports.pool = pool;
在您的查询代码中:
var db = require('../dbconnection');
var getPostId = function(id,callback) {
var sql = "SELECT post_id FROM posts.post_feeds WHERE id=?";
db.pool.query(sql,[id],callback);
}
作为风格点,在处理结果时执行以下操作:
let datasets = results.map( result => { "postId": result['post_id'] });