Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

The parameter name '' has already been declared. Parameter names must be unique

I have here an API created in NodeJS. When I run the API, it works on the first time, but if run it again its give me an error The parameter name Username has already been declared. Parameter names must be unique at Request.input. I checked other threads on how to fix this thing. Some answers that it needs to be cleared, but I think there is no function in NodeJS mssql library that clears parameter.(correct me if I’m wrong)

My code:

const res = require("express/lib/response")
const {sql,request} = require("../config/connection")

module.exports = {
checkExist: (data,callBack) => {
   
    if(data.key == process.env.KEY) {

        var username = data.username
        var firstname = data.firstname
        var middlename = data.middlename
        var lastname = data.lastname

        if(username == "" || firstname == "" || middlename == "" || lastname == "") {
            return callBack("Invalid Input")
        }
        else {
            request.input('Username', sql.VarChar(50), username);
            request.input('FirstName', sql.VarChar(50), firstname);
            request.input('MiddleName', sql.VarChar(50), middlename);
            request.input('LastName', sql.VarChar(50), lastname);
            request.output('Result', sql.Int);

            request.execute('sp_INS_User').then(function(recordsets, returnValue, affected) {
                if(recordsets.output.Result == -100) {
                    return callBack("Player Exist with different Username")
                }
                else if(recordsets.output.Result == -4) {
                    return callBack("Something went wrong while processing your request, please try again later.")
                }
                else {
                    if(recordsets.output.Result == 1000) {
                        return callBack(null,recordsets)
                    }
                }
               
                // console.dir(err);
              }).catch(function(err) {
                //return callBack(err)
                return callBack("Something went wrong while processing your request, please try again later.")
           });
        }
       

    }
    else {
            return callBack("Invalid Access")
    }
}

}

My code in : ../config/connection/

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

const sql = require("mssql")
require("dotenv").config()

const sqlConfig = {
user: process.env.USER,
password: process.env.PASS,
database: process.env.DB_MAIN,
server: process.env.HOST,
pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 30000
},
options: {
    encrypt:false,
    trustServerCertificate: true
}

}

const con = sql.connect(sqlConfig).then(function() {

console.log(`Database connection successful!`);

}).catch(function(err) {
console.log(`Database connection ${err}!`);

});

const request = new sql.Request();

module.exports = {
sql,request
}

>Solution :

This looks like an issue of reusing the request object so the second time this function gets called, you’re using the same request object that was previously used the first time this function was called. As such, you’re registering duplicate names with request.input().

Apparently, you will need a new copy of const request = new sql.Request(); each time you want to use it because the error message is telling you that you can’t repeat statements like request.input('Username',...) over and over on the same request object. So, export a function to get a new request object rather than exporting just one pre-made object.

You can do that like this:

../config/connection/

const sql = require("mssql")
require("dotenv").config()

const sqlConfig = {
user: process.env.USER,
password: process.env.PASS,
database: process.env.DB_MAIN,
server: process.env.HOST,
pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 30000
},
options: {
    encrypt:false,
    trustServerCertificate: true
}

}

const con = sql.connect(sqlConfig).then(function() {

console.log(`Database connection successful!`);

}).catch(function(err) {
console.log(`Database connection ${err}!`);

});

const getRequest = function() { return new sql.Request());

module.exports = {
    sql, getRequest
};

And, your other code:

const res = require("express/lib/response")
const { sql, getRequest } = require("../config/connection")

module.exports = {
    checkExist: (data, callBack) => {

        const request = getRequest();

        if (data.key == process.env.CAMS_INPLAY_KEY) {

            var username = data.username
            var firstname = data.firstname
            var middlename = data.middlename
            var lastname = data.lastname

            if (username == "" || firstname == "" || middlename == "" || lastname == "") {
                return callBack("Invalid Input")
            } else {
                request.input('Username', sql.VarChar(50), username);
                request.input('FirstName', sql.VarChar(50), firstname);
                request.input('MiddleName', sql.VarChar(50), middlename);
                request.input('LastName', sql.VarChar(50), lastname);
                request.output('Result', sql.Int);

                request.execute('sp_INS_User').then(function(recordsets, returnValue, affected) {
                    if (recordsets.output.Result == -100) {
                        return callBack("Player Exist with different Username")
                    } else if (recordsets.output.Result == -4) {
                        return callBack(
                            "Something went wrong while processing your request, please try again later."
                            )
                    } else {
                        if (recordsets.output.Result == 1000) {
                            return callBack(null, recordsets)
                        }
                    }

                    // console.dir(err);
                }).catch(function(err) {
                    //return callBack(err)
                    return callBack(
                        "Something went wrong while processing your request, please try again later."
                        )
                });
            }


        } else {
            return callBack("Invalid Access")
        }
    }

}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading