¿Cómo puedo hacer mi conexión Node.js MySQL como una obra promesa?

Christopher Smith:

Acabo de empezar a trabajar con Node.js y mis conocimientos JS es un poco oxidado.

Empecé con devoluciones de llamada y luego me enteré de promesas. Esta sintaxis se parecía más a mis funciona el cerebro, por lo que volví a escribir mi código de promesas. Pero ahora mi conexión MySQL no funciona. No puede incluso conseguir alcanzado (creo ...) He conectado la palabra "prueba" en el archivo USERDB, que funcionó. Pero a continuación, en el archivo de MySQL La console.log "test2" no funcionó.

¡Gracias a todos! Chris

Aquí está mi server.js (el archivo que se inicia nodo):

/* REQUIRE */
const oAuth2Server = require('node-oauth2-server');
const express = require('express');
const bodyParser = require('body-parser');
const oAuthModel = require('./endpoints/auth/authModel');
const util = require('util');
const dbCon = require('./subsystem/mySql')

/* CONST */
const port = 3000;
const debug = true;
const app = express();

/* INIT */
app.oauth = oAuth2Server({
    model: oAuthModel,
    grants: ['password'],
    debug: debug
})

/* ROUTER */
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(app.oauth.errorHandler());


const authRoutes = require('./router/auth')(express.Router(), app, dbCon)
app.use('/auth', authRoutes);

app.all('*', (req, res) => {
    res.status(404).send({message: "This service was not found"});
});




/* Start Server */
app.listen(port, () => {
    console.log(`listening on port ${port}`)
})

Aquí está mi auth.js archivos enrutador:

module.exports =  (router, expressApp, dbCon) => {
    const userDB = require('../endpoints/user/userDB')(dbCon)
    const authMiddleware = require('../endpoints/auth/authMiddleware')
    const userMiddleware = require('../endpoints/user/userMiddleware')(userDB)

    router.post('/registerUser', userMiddleware.registerUser)

    //router.post('/login', expressApp.oauth.grant(), authMiddleware.login)
    router.post('/login', expressApp.oauth.grant())
    return router
}

Aquí está mi archivo USERDB:

let mySqlConnection;

module.exports = injectedMySqlConnection => {

    mySqlConnection = injectedMySqlConnection

    return {

        registerUserInDB: registerUserInDB,
        getUserFromCrentials: getUserFromCrentials,
        doesUserExist: doesUserExist,
        getUserByUsername: getUserByUsername
    }
}

const registerUserInDB = (username, password) => {
    return new Promise((resolve,reject) => {
        //execute the query to register the user
        mySqlConnection.query(`INSERT INTO users (username, user_password) VALUES ('${username}', SHA('${password}'))`)
        .then(data => {resolve(true)})
        .catch(error => {reject(error)})
    })
}

const getUserFromCrentials = (username, password) => {
    return new Promise((resolve,reject) => {
        //create query using the data in the req.body to register the user in the db
        const getUserQuery = `SELECT * FROM users WHERE username = '${username}' AND user_password = SHA('${password}')`

        console.log('getUserFromCrentials query is: ', getUserQuery);

        //execute the query to get the user
        mySqlConnection.query(getUserQuery)
        .then(data => {resolve(data)})
        .catch(error => {reject(error)})
    })
}

const doesUserExist = username => {
    return new Promise((resolve,reject) => {
        console.log('test');
        //execute the query to check if the user exists
        mySqlConnection.query(`SELECT * FROM users WHERE username = '${username}'`)
        .then(data => {resolve(data.results !== null ? data.results.length == 1 ? true : false : false)})
        .catch(error => {reject(error)})
    })
}

const getUserByUsername = username => {
    return new Promise((resolve,reject) => {
        //execute the query to check if the user exists
        mySqlConnection.query(`SELECT id, username FROM users WHERE username = '${username}'`)
        .then(data => {resolve(data)})
        .catch(error => {reject(error)})
    })
}

Aquí está mi userMiddleware (es este middleware?):

let userDb;

module.exports = injectedUserDb => {
    userDb = injectedUserDb
    return {
        registerUser: registerUser
    }
}

function registerUser(req, res){

    console.log(`authRoutesMethods: registerUser: req.body is:`, req.body);

    //query db to see if the user exists already
    userDb.doesUserExist(req.body.username)
    .then(data => {
        if(data)
        {
            sendResponse(res, "User already exists", 200)
            return
        }
        else
        {   
            //register the user in the db
            userDb.registerUserInDB(req.body.username, req.body.password)
            .then(data => {
                userDb.getUserByUsername(req.body.username)
                .then(data => {sendResponse(res,  data.results, "")})
                .catch(error => {sendResponse(res, "Failed to register user", error)})

            })
            .catch(error => {sendResponse(res, "Failed to register user", error)})
        }
    })
    .catch(err => {
        sendResponse(res, "User already exists", 200)
        return
    })
}


function sendResponse(res, message, error) {

    res
        .status(error !== null ? error !== null ? 400 : 200 : 400)
        .json({
            'message': message,
            'error': error,
        })
}

Y por último pero no menos importante mi archivo mySql.js:

var mySql = require('mysql');

const query = sql => {
    return new Promise( ( resolve, reject ) => {
        let connection = mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'oauth2test'
        });
        console.log('test2');
        connection.query( sql, ( err, rows ) => {
            if ( err )
            {
                connection.end();
                reject( err );
            }
            else
            {
                connection.end();
                resolve( rows );
            }
        });
    });
}

module.exports.query = query;
Terry Lennox:

Usted tiene un simple error tipográfico en el archivo de mySql.js:

La línea

var mySql = require('mysql');

debe sustituirse por

var mysql = require('mysql');

Aparte de que el código de consulta funciona bien en mi máquina:

var mysql = require('mysql');

const query = sql => {
    return new Promise( ( resolve, reject ) => {
        let connection = mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'oauth2test'
        });
        console.log('test2');
        connection.query( sql, ( err, rows ) => {
            if ( err )
            {
                connection.end();
                reject( err );
            }
            else
            {
                connection.end();
                resolve( rows );
            }
        });
    });
}

module.exports.query = query;

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373219&siteId=1
Recomendado
Clasificación