How to connect my route parameter in express with @mysql/x devAPI?

被刻印的时光 ゝ 提交于 2019-12-11 15:51:45

问题


Here is my code:

var express = require('express');
var router = express.Router();
var mysqlx = require('@mysql/xdevapi');




router.use(`/:email`, function (req, res, next){
    mysqlx.getSession( {

        user: 'username', 
        password: 'password',
        host: 'localhost', 
        port: '33060' } )

        // .then(session => {
        //   console.log(session.inspect());
        // })

        .then(function (session) {
            var db = session.getSchema('nms2019local');
            var opsTable = db.getTable('operators');
            return opsTable
                .select (['email', 'admin'])
                .where('email like :email')
                .bind('email',':email')
                .execute (function (row) {
                    console.log(row);

                });    
        })
        .then(function (myResult){
            console.log(myResult);

        })
        .catch(function (err){
            console.log(err);
        })

        next()


    });


    router.use('/', function (req, res,){

        res.send('DB Is Connected');

    });

    module.exports = router;

}

Through postman I run the following GET command:

get /expressroutename/email/test@email.com I get the following in nodemon:

GET /expressroutename/email/test@email.com 200 36.096 ms - 15
{
  getWarnings: [Function: getWarnings],
  getWarningsCount: [Function: getWarningsCount],
  fetchAll: [Function: fetchAll],
  fetchOne: [Function: fetchOne],
  getColumns: [Function: getColumns],
  getResults: [Function: getResults],
  nextResult: [Function: nextResult],
  toArray: [Function: toArray]
}

when I column out the .where command

 //.where('email like :email')

and put in the following in Postman I get in nodemon:

GET /expressroutename/email 200 45.116 ms - 15
[ 'test@email.com', 1 ]
[ 'test1@email.com', 1 ]
{
  getWarnings: [Function: getWarnings],
  getWarningsCount: [Function: getWarningsCount],
  fetchAll: [Function: fetchAll],
  fetchOne: [Function: fetchOne],
  getColumns: [Function: getColumns],
  getResults: [Function: getResults],
  nextResult: [Function: nextResult],
  toArray: [Function: toArray]

I think its a syntax error, but I have typed it via the docs many times and it doesn't seem to work. Please help.

Thanks


回答1:


It looks like it might be an issue with the way you are using bind().

Basically you are providing a filtering criteria 'email like :email' where :email is a placeholder that is supposed to be replaced by a specific value using bind(). However, you are assigning ':email' (the specific String value) to the placeholder, and I suspect you don't have any row in that operators table where email = ':email'. That's why when you remove the filtering criteria (specified by the where() API) you start getting proper results, since the filter isn't actually being applied anymore.

So, if you want to filter, what you need to do is provide the actual email address as the second parameter of bind(). I'm a bit rusty with Express, but I think the following should do the trick:

opsTable.select(['email', 'admin'])
  .where('email like :email')
  .bind('email', req.params.email)

Note that the first parameter of bind() is the name of the placeholder without the : (colon) prefix.

Disclaimer: I'm the lead dev of the MySQL X DevAPI Connector for Node.js




回答2:


var express = require('express');
var router = express.Router();
var mysqlx = require('@mysql/xdevapi');




router.use(`email/:email`, function (req, res, next){
         const email = req.params.email        

     mysqlx.getSession( {

        user: 'username', 
        password: 'password',
        host: 'localhost', 
        port: '33060' } )

        // .then(session => {
        //   console.log(session.inspect());
        // })

        .then(function (session) {
            var db = session.getSchema('dbname');
            var TestTable = db.getTable('test');
            return TestTable
                .select (['email', 'admin'])
                .where('email like :email')
                .bind('email', email)
                .execute (function (row) {
                    console.log(row);

                });    
        })
        .then(function (myResult){
            console.log(myResult);

        })
        .catch(function (err){
            console.log(err);
        })

        next()


    });


    router.use('/', function (req, res,){

        res.send('DB Is Connected');

    });

    module.exports = router;


来源:https://stackoverflow.com/questions/59019784/how-to-connect-my-route-parameter-in-express-with-mysql-x-devapi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!