最近我開發了一個使用nodejs,express,https和mysql的rest API。這在開始時工作良好,但在兩到三天後,我開始抱怨服務器沒有響應,並且大多數時間要求返回超時。Node.js服務器在某些請求後沒有返回響應
基本上在一定數量的任務後,我的node.js應用程序停止響應請求。我甚至看到路由在我的控制檯上被觸發,並且來自我的客戶端(Android應用程序)的HTTP調用到達服務器所有這些。但是重新啓動我的node.js應用服務器,所有事情都會重新開始,直到事情不可避免地再次停止。該應用程序從不崩潰,它只是停止響應請求。
我沒有收到任何錯誤,並且我確保處理並記錄所有數據庫連接錯誤,所以我不確定從哪裏開始。
我的數據庫連接的代碼是在這裏:
// 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);
任何線索,什麼可能正在發生以及我如何解決這個問題?
這裏是我的籌碼:
與Ubutnu 14.04和Nginx的數字海洋服務器上的Node.js(使用快遞4.15.2 + PM2 2.4.6)數據庫(使用節點的MySQL)
您應該顯示的代碼處理HTTP請求也。 –
@JulianGoacher請參閱已更新的文章 – user3528954
您正在創建單個數據庫連接,這意味着您只能在應用程序的任何時候執行一個查詢([source](https://github.com/mysqljs/mysql) #執行查詢 - 在平行))。你可能想看看[連接池](https://github.com/mysqljs/mysql#pooling-connections)。 – robertklep