Проблема подключения к моей базе данных sql с использованием REST API-сервера с Node.js - PullRequest
0 голосов
/ 29 июня 2018

Я очень новичок в программировании серверов и JavaScript в целом, но в настоящее время я пытаюсь настроить сервер REST API и подключить его к моей базе данных sql, на данный момент я делаю все локально. Я использую Ubuntu 18.04 при использовании NODE js. Мне удалось успешно создать REST API и подключиться к нему через URL-адрес веб-страницы или с почтальоном. Я создал базу данных сервера SQL через мой терминал CMD и создал тестовые данные на нем. Я искал руководства для подключения API REST к базе данных, но я думаю, что информация, которую я даю API для подключения, - это то, где происходит моя проблема. Я начинаю с этого ниже как мой server.js, где у меня есть папка Controller и файл ProductController.js, где я обрабатываю маршрут / api / products.

var http = require('http');
var express = require('express');
var app = express();
var port = process.env.port || 3000;
var productController = require('./Controller/ProductController')();
app.use("/api/products", productController);
app.listen(port, function(){
    var datetime = new Date();
    var message = "Server running on Port:- " + port + " Started at :- " + 
datetime;
    console.log(message);   
});

Ниже приведен мой файл ProductController.js. Проблема может быть здесь, но я считаю, что это мой следующий файл с именем connect.js, таблица в моей базе данных sql называется «data», отсюда и часть «SELECT * FROM data». Когда я пытаюсь получить эти данные в почтальоне, отображается ошибка, которую я установил «Ошибка при вставке данных». поэтому я считаю, что при запуске я не получаю данные из sql, поэтому conn.close () не достигается.

var express = require('express');
var router = express.Router();
var sql = require("mssql");
var conn = require("../connection/connect")();

var routes = function()
{
    router.route('/')
        .get(function(req, res)
        {
            conn.connect().then(function()
            {
                var sqlQuery = "SELECT * FROM data";
                var req = new sql.Request(conn);
                req.query(sqlQuery).then(function (recordset)
                {
                    res.json(recordset.recordset);
                    conn.close();
                })
                    .catch(function (err) {
                         conn.close();
                         res.status(400).send("Error while inserting data");
                    });
            })
                .catch(function (err) {
                    conn.close();
                    res.status(400).send("Error while inserting data");
                });
        });
    return router;
};
module.exports = routes;

Это мой файл connect.js ниже. У меня есть пароль для root, который не ***, но правильный на моей машине. Я изменил подключаемый модуль root на mysql_native_password в терминале mysql. Я думаю, что сервер: часть не так, я пытался закомментировать это, но по-прежнему нет связи. У меня нет SQL Server Management Studio и я не нашел способ получить имя моего сервера sql через терминал. Я видел примеры, которые, кажется, располагают информацией о том, что вам нужно дать API для подключения. Если у кого-то есть понимание этого, это также будет оценено. Моя конечная цель - в конечном итоге создать маршруты GET и POST для базы данных и функцию для манипулирования данными POST, но сейчас я просто пытаюсь связать вещи, чтобы я мог поиграться с данными, полученными GET. Спасибо за любую информацию, которую вы можете дать, она очень ценится.

var sql = require("mssql");
var connect = function()
{
    var conn = new sql.ConnectionPool({
        host: 'localhost'
        user: 'root',
        password: '********',
        server: 'mysql',
        database: 'test'
    });

    return conn;
};

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Для диагностики ошибок вы должны добавить некоторые записи в ваши блоки catch:

.catch(function (err) {
    console.log('connection error', err); //or Bunyan, Winston, Morgan, etc. logging library
    conn.close();
    let message = "Error while inserting data"
    if (process.env.NODE_ENV === 'development') { //conditionally add error to result message
        message += "\n"+err.toString());
    } 
    res.status(500).send(message);  //use 5xx for server problems, 4xx for things a user could potentially fix
});

И установите NODE_ENV в вашей среде, например, в package.json:

"scripts": {
    "start": "NODE_ENV=production node app.js"
    "start-dev": "NODE_ENV=development node app.js"
}
0 голосов
/ 29 июня 2018

Похоже, в вашем файле connect.js могут быть ошибки:

var conn = new sql.ConnectionPool({
    host: 'localhost'
    user: 'root',
    password: '********',
    server: 'mysql',
    database: 'test'
});

должно быть в формате:

const pool = new sql.ConnectionPool({
    user: '...',
    password: '...',
    server: 'localhost',
    database: '...'
})

Обратите внимание, что в настоящее время у вас есть и host, и server, похоже, требуется только server. Кроме того, server: 'mysql' не имеет смысла, если вы подключаетесь к базе данных MSSQL.

Источник: Документация по node-mssql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...