Подключение к базе данных RDS из node.js

mysql node.js amazon-rds

4016 просмотра

1 ответ

1627 Репутация автора

Я пытаюсь выучить node.js, чтобы начать работу над моим личным проектом. Я пытался следовать примерам в книге "Learning node.js" (автор Марк Вандшнейдер). В этот момент я решил отказаться от практики его примера и сразу перейти к использованию его кода в качестве основы для моего кода практики.

В моем практическом коде все, что я пытаюсь сделать, это подключиться к моей базе данных RDS (нет, я не использую Elastic Beanstalk, кстати) и вывести содержимое одной из таблиц. Кажется достаточно простым, но когда я собираю код для него (на основе книги), он пытается подключиться, но зацикливается на процессе. Это мой код:

var pool = require('generic-pool');
var async = require('async');
var mysql = require('mysql');

var host = "<database-name>.cu8hvhstcity.us-west-2.rds.amazonaws.com",
    database = "<database-name>", 
    user = "<username>",
    password = "<someLongPassword>";

var dbClient; 

async.waterfall([
    // 1. establish connection to database
    function (callback) {
        console.log("Connecting to database " + database + "...");
        dbClient = mysql.createConnection({
            host: host,
            database: database,
            user: user,
            password: password,
            port: 3306
        });
        dbClient.connect();
    },
    // 2. select all from a table (let's go for locations)
    function (cb)
    {
        var query = "SELECT * FROM locations"
        console.log("running query \"" + query + "\"...");
        dbClient.query(query, cb);  
    },

    function (rows, fields, callback)
    {
        console.log(fields);
        for (var i = 0; i < rows.length; i++)
        {
            console.log(JSON.stringify(rows, null, '\t'));
        }
    }



], function (err, results) {
    if (err)
    {
        console.log("An error occurred...");
        console.log(err);
    }
    else
    {
        console.log("Everything successfully completed!");
    }       
    dbClient.end();
})

Это лучше, чем первая попытка, когда я указывал databaseчлену переданный аргумент mysql.createConnection(), и он жаловался, что база данных неизвестна. Ни в том, ни в другом случае ни «Произошла ошибка ...», ни «Все успешно завершено!» вывод в окно.

Происходит ли какая-то асинхронная работа, которая приводит к какому-то бесконечному бесконечному циклу или к чему-то еще? Как я могу это исправить?

Книга имеет связанную страницу GitHub

НОТА:

Ни мой пример, ни приведенный код GitHub не используют эту poolпеременную, поэтому ее можно просто закомментировать. Все , что вам нужно сделать , чтобы запустить это самостоятельно есть npm install async, npm install mysql(а также создание базы данных фиктивного RDS , чтобы указать на, который содержит locationsтаблицу) перед копированием, вставки, и работает этот код.

РЕДАКТИРОВАТЬ:

Я исправил проблему с database. Я понял, что имя базы данных использует «_», а не «-». Та же проблема (код зависает) все еще сохраняется ...

Автор: Mike Warren Источник Размещён: 19.07.2016 07:24

Ответы (1)


1 плюс

1627 Репутация автора

Решение

Я сделал следующее:

Во второй функции массива мне понадобилось два параметра, а не один. Я исправил так: function(results, cb) третья функция просто необходимаcallback(null)

Автор: Mike Warren Размещён: 05.08.2016 03:08
32x32