Kürzlich habe ich eine Rest API mit Nodejs, Express, https und MySQL zur Produktion entwickelt. Das funktioniert gut, aber nach zwei bis drei Tagen habe ich mich beschwert, dass der Server nicht antwortet und die meiste Zeit die Zeit abläuft.Node.js Server antwortet nicht nach bestimmten Anfragen
Grundsätzlich nach einer bestimmten Anzahl von Quests reagiert meine node.js App nicht mehr auf Anfragen.Ich sehe sogar, dass Routen auf meiner Konsole ausgelöst werden und die HTTP-Aufrufe von meinem Client (Android App) den Server alle erreichen. Aber danach Starten Sie meinen node.js-App-Server neu, alles funktioniert wieder, bis die unvermeidlichen Dinge wieder aufhören. Die App stürzt nie ab, sie reagiert nicht mehr auf Anfragen.
Ich bekomme keine Fehler, und ich habe sichergestellt, dass alle DB-Verbindungsfehler zu behandeln und zu protokollieren, so dass ich nicht sicher bin, wo ich anfangen soll.
Mein Datenbank-Verbindungscode ist hier:
// 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;
Mein Datenbank-Abfrage-Code ist hier:
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);
}
Mein app-Server-Code:
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);
Jede Ahnung, was da wollte passiert und wie kann ich dieses Problem lösen?
Hier ist mein Stack:
Node.js auf Digital-Ozean-Server mit Ubutnu 14.04 und Nginx (mit Express 4.15.2 + PM2 2.4.6) Datenbank MySQL ausgeführt wird (unter Verwendung von Knoten-mysql)
Sie sollten auch den Code Umgang mit den HTTP-Anfragen zeigen. –
@JulianGoacher Bitte beachten Sie die aktualisierten Beiträge. – user3528954
Sie erstellen eine einzelne Datenbankverbindung, dh Sie können während Ihrer Anwendung nur eine Abfrage gleichzeitig ausführen ([Quelle] (https://github.com/mysqljs/mysql) # Ausführen-Abfragen-in-Parallel)). Möglicherweise möchten Sie sich [Verbindungspooling] (https://github.com/mysqljs/mysql#pooling-connections) ansehen. – robertklep