どのように私は約束の仕事としての私のNode.jsのMySQL接続を行うことができますか?

クリストファー・スミス:

私はただのNode.jsで仕事を始めているし、私のjsの知識が少し錆びです。

私は、コールバックを開始し、その後、私は約束を知りました。私は約束して自分のコードを書き直しましたので、この構文は、より多くの私の脳の作品のようでした。しかし、今、私のMySQL接続が動作しません。それも、私が働いていたファイルUSERDB、単語「test」をログに記録している(と思う...)に達し得ることができません。しかし、その後のMySQLのファイルにはconsole.log「TEST2」は動作しませんでした。

あなたのすべてに感謝!クリス

ここに私のserver.js(ノードが起動し、そのファイル)は、次のとおりです。

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

ここに私のルータのファイル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
}

ここに私の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)})
    })
}

ここに私のuserMiddlewareは(?このミドルウェアである)です。

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

そして最後にではなく、少なくとも私の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;
テリー・レノックス:

あなたのmySql.jsファイル内の単純なタイプミスがあります。

この線

var mySql = require('mysql');

に置き換えてください

var mysql = require('mysql');

クエリのコードは私のマシン上で[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;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373213&siteId=1