2015-12-23 2 views
-3

У меня возникли проблемы с реализацией API останова в проекте node js. В настоящее время я успешно реализовал API для отдыха, но есть проблема, когда я делаю 10-кратный запрос любого веб-сервиса. он не будет отвечать на сервер узла.REST API в узле js не отвечает после 10 запросов

, пожалуйста, помогите ?? .. заранее.

Спасибо за ваш повтор. вот код моего веб-сервиса. actullly Я не использую какие-либо конкретные рамки для отдыха в nodejs, которые ожидают выражения. Код:

router.route('/changePassword').post(function(req,res){ 
var authkey = req.body.authkey; 
var oldpassword = sha1(req.body.oldpassword); 
var password = sha1(req.body.newpassword); 
var organizationid = req.body.organizationid; 
var userid = req.body.userid; 
connectionpool.getConnection(function(err, connection) { 
    if (err) { 
     console.error('CONNECTION error: ',err); 
     res.statusCode = 503; 
     res.send({ 
      result: 'error', 
      error: err.code 
     }); 
    } else { 
     connection.query('SELECT organizationid FROM authenticationkey WHERE authenticationkey = "'+authkey+'"', function(err, result) { 
      if (err) { 
       res.statusCode = 500; 
       res.send({status: '0',err: err.code}); 
      } 
      if(result.length > 0){ 
       connection.query('SELECT userid FROM users WHERE password = "'+oldpassword+'" AND organizationid = "'+organizationid+'" AND userid = "'+userid+'"', function(err, result) { 
        if(result.length > 0){ 
         var update = { 
           password:password 
         }; 
         connection.query('UPDATE users SET ? WHERE userid = ? AND organizationid = ?',[update,userid,organizationid], function(error, row) { 
          if(row){ 
           res.send({ 
            status: '1', 
            message: 'Password changed successfully.' 
           }); 
          }else{ 
           res.send({ 
            status: '-1', 
            message: 'Password is not changed...please try again.' 
           }); 
          } 
         }); 
        }else{ 
         res.send({ 
          status: '-2', 
          message: 'Your old password is incorrect.' 
         }); 
        } 
        //connection.release(); 
       }); 
      }else{ 
       res.send({ 
        status: '0', 
        error: 'Authentication key is invalid.' 
       }); 
      } 
     }); 
    } 
}); 

});

End Кроме того, это моя конфигурация маршрут, который я использую для URL

var express = require('express'), 
router = express.Router(), 
bodyParser = require('body-parser'); //parses information from POST 
var cn = require('./../db'); 
var connectionpool = cn.open(); 
var sha1 = require('sha1'); 
var http = require("http"); 
// for file upload 
var fs = require('fs'); 
var path = require('path'), 
// Get parent directory 
directory = path.dirname(module.parent.filename); 
var parent = path.resolve(directory, '..'); 
var uploaddir = parent + (path.sep) +'images' + (path.sep) + 'users' + (path.sep); 
var thumbdir = parent + (path.sep) +'images' + (path.sep) + 'users' + (path.sep)+ 'thumb' + (path.sep); 
var imageurl = "/images/users/thumb/"; 
var dirpath = "/images/users/"; 
+0

Где код? как мы можем помочь вам без кода? –

+0

Пожалуйста, добавьте код, на который вы ссылаетесь. – Trevor

+0

Просьба предоставить дополнительную информацию, а также код – keshav

ответ

1

Я предполагаю, что вы используете node-mysql connection pooling (пожалуйста, укажите, что в вашем вопросе).

В документации говорится:

Когда вы закончите с подключением, просто позвоните connection.release() и соединение вернется в пул, готов к использованию снова кем-то другим.

Вы, кажется, не выпускаете соединения, которые вы получаете из пула (фактически, в какой-то момент он прокомментирован).

Кроме того, pool options documentation состояния:

connectionLimit: Максимальное количество соединений, чтобы создать сразу. (По умолчанию: 10)

Поскольку вы не отпуская свои связи в любом месте, после 10 запросов последующего вызова connectionpool.getConnection() будет ждать, пока соединение не станет доступным. Это никогда, потому что вы их не выпускаете.

Кроме того, ваш код подвержен SQL-инъекциям (authkey, organizationid и userid не переданы). Вам необходимо указать properly escape все введенные пользователем данные или использовать заполнители.

+0

благодарит за помощь. его действительно оценили. Как настроить максимальное количество подключений без ограничений? –

+0

@DhavalKanojiya попробуйте установить 'connectionLimit' в' Infinity' (однако, я не думаю, что вы действительно этого хотите). – robertklep

Смежные вопросы