Wie kann ich meine Node.js MySQL-Verbindung als ein Versprechen Arbeit machen?

Christopher Smith:

Ich habe gerade erst begonnen, um die Arbeit mit node.js und meinem js Wissen ist ein wenig eingerostet.

Ich begann mit Rückrufen und dann fand ich über Versprechungen aus. Diese Syntax war mehr wie mein Gehirn funktioniert, so dass ich meinen Code mit Versprechungen neu geschrieben. Aber jetzt meine MySQL-Verbindung funktioniert nicht. Er kann nicht einmal erreicht bekommen (ich glaube, ...) Ich habe das Wort „Test“ in der Datei userdb angemeldet, die funktionierten. Aber dann in der mySql Datei hat die console.log „test2“ nicht Arbeit.

Danke an alle! Chris

Hier ist meine server.js (die Datei, dass der Knoten beginnt):

/* 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}`)
})

Hier ist meine Routerdatei auth.js:

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
}

Hier ist meine userdb-Datei:

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)})
    })
}

Hier ist meine userMiddleware (ist diese 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,
        })
}

Und last but not least meine mySql.js-Datei:

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:

Sie haben einen einfachen Tippfehler in Ihrer mySql.js-Datei:

Die Linie

var mySql = require('mysql');

sollte ersetzt mit

var mysql = require('mysql');

Andere als die der Abfrage-Code funktioniert auf meinem Rechner ok:

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;

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=373200&siteId=1
Empfohlen
Rangfolge