节点js中的REST API在10次请求后没有响应

REST API in node js does not respond after 10 request

本文关键字:请求 响应 10次 js 中的 REST API 节点      更新时间:2023-09-26

我在node-js项目中实现rest API时遇到了麻烦。目前我已经成功实现了rest API,但当我10次请求任何Web服务时都会出现问题。它不会从节点服务器作出响应。

请帮忙??。。提前谢谢。

谢谢你的重播。这是我的网络服务代码。实际上,我并没有在nodejs中使用任何期望表达的特定rest框架。代码:

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.'
                });
            }
        });
    }
});

});

结束这也是我的路线配置,我正在使用的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/";

我的猜测是您正在使用node-mysql连接池(请在您的问题中提及)。

文件说明:

当您完成连接后,只需调用connection.release(),连接就会返回到池中,准备供其他人再次使用。

你似乎没有释放从池中获得的连接(事实上,它在某个时候被注释掉了)。

此外,池选项文档指出:

connectionLimit:一次创建的最大连接数。(默认值:10

由于您不会在任何地方释放连接,因此在10次请求后,对connectionpool.getConnection()的后续呼叫将等待连接可用。从来没有,因为你没有释放他们。

此外,您的代码很容易受到SQL注入的影响(authkeyorganizationiduserid是在未设置脚本的情况下传递的)。您需要正确地转义所有用户提供的输入,或者使用占位符。