Parametry URL nie są przekazywane

0

Mam następujący skrypt:


var oracledb = require('oracledb');
var bcrypt = require('bcrypt');
var jwt = require('jsonwebtoken');
var config = require('../ConfigData/database');

 function post(req, res, next) {
    var user = {
        email: req.body.email
    };
    //req.body.password = 'zxcvbn';
    //req.body.email = '[email protected]';

    var unhashedPassword = req.body.password;

    console.log('INPUT:' +req.body.email+' - '+req.body.password);

    bcrypt.genSalt(10, function(err, salt) {
        if (err) {
            return next(err);
        }
        bcrypt.hash(unhashedPassword, salt, function(err, hash) {
            if (err) {
                return next(err);
            }

            user.hashedPassword = hash;
            console.log(user.hashedPassword);

            insertUser(user, function(err, user) {
                var payload;

                if (err) {
                    return next(err);
                }

                payload = {
                    sub: user.email,
                    role: user.role
                };

                res.status(200).json({
                    user: user,
                    token: jwt.sign(payload, config.jwtSecretKey, {expiresIn: 360})
                });
            });
        });
    });
}

module.exports.post = post;

function insertUser(user, cb) {
    oracledb.getConnection(
  //      config.hrPool

  {
          user: "SYSTEM",
          password: "********",
          connectString: "ANDROMEDALOC"
      }


        ,
        function(err, connection){
            if (err) {
                return cb(err);
            }

            connection.execute(
                `insert into jsao_users (
                   email,
                   password,
                   role
                )
                values (
                    :email,
                    :password,
                    \'BASE\'
                )
                returning
                   id,
                   email,
                   role
                into
                   :rid,
                   :remail,
                   :rrole`,
                {
                    email: user.email.toLowerCase(),
                    password: user.hashedPassword,
                    rid: {
                        type: oracledb.NUMBER,
                        dir: oracledb.BIND_OUT
                    },
                    remail: {
                        type: oracledb.STRING,
                        dir: oracledb.BIND_OUT
                    },
                    rrole: {
                        type: oracledb.STRING,
                        dir: oracledb.BIND_OUT
                    }

                },
                {
                    autoCommit: true
                },
                function(err, results){
                    if (err) {
                        connection.release(function(err) {
                            if (err) {
                                console.error(err.message);
                            }
                        });

                        return cb(err);
                    }

                    console.log(results.outBinds);

                    cb(null, {
                        id: results.outBinds.rid[0],
                        email: results.outBinds.remail[0],
                        role: results.outBinds.rrole[0]
                    });

                    connection.release(function(err) {
                        if (err) {
                            console.error(err.message);
                        }
                    });
                });
        }
    );
}

skrypt powinien dodać użytkownika do bazy danych jeśli takowy nie istnieje.

wywołanie z postman-a: http://localhost:3333/api/users?user='[email protected]'&password='zxcvbn'

i odpowiedź w postman

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="utf-8">
	<title>Error</title>
</head>

<body>
	<pre>Error: data and salt arguments required<br> &nbsp; &nbsp;at Object.hash (c:\ANDROMEDA_WEB\OracleNodeAuth\node_modules\bcrypt\bcrypt.js:137:17)<br> &nbsp; &nbsp;at c:\ANDROMEDA_WEB\OracleNodeAuth\src\Controllers\Users.js:23:16</pre>
</body>

</html>

i w konsoli:

Initializing database connection
Starting Application
Web server listening on localhost:3333
Initializing model Webserver
INPUT:undefined - undefined
::1 - - [03/Feb/202255:00 +0000] "POST /api/users?user=%[email protected]%27&password=%27zxcvbn%27 HTTP/1.1" 500 352 "-" "PostmanRuntime/7.29.0"
Error: data and salt arguments required
at Object.hash (c:\ANDROMEDA_WEB\OracleNodeAuth\node_modules\bcrypt\bcrypt.js17)
at c:\ANDROMEDA_WEB\OracleNodeAuth\src\Controllers\Users.js16

Co robię źle? Wygląda na to że parametry przy wywołaniu nie przechodzą.

4

Przekazujesz parametry jako query string ?user='[email protected]'&password='zxcvbn', a odczytujesz req.body.

  1. Albo przekaż parametry przez body (np metodą POST)
  2. Albo odczytaj parametry z query, req.query.email oraz req.query.password.

1 użytkowników online, w tym zalogowanych: 0, gości: 1