首页 > 解决方案 > 使用带有 Node.js 的 REST api 服务器连接到我的 sql 数据库的问题

问题描述

一般来说,我对编码服务器和 javascript 非常陌生,但我目前正在尝试设置一个 REST api 服务器并将其连接到我的 sql 数据库,目前我正在本地做所有事情。我在使用节点 js 时运行 ubuntu 18.04。我已经能够成功创建一个 REST api 并通过网页的 url 或 Postman 连接到它。我通过我的 cmd 终端创建了一个 sql server 数据库,并在其上创建了测试数据。我一直在查看将 REST api 连接到数据库的指南,但我认为我给 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 数据库中的表被称为“数据”,因此是“SELECT * FROM 数据”部分。当我尝试在邮递员中获取此数据时,它会显示我设置的错误“插入数据时出错”。所以我相信在运行时我没有从 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 密码不是 ***,但在我的机器上是正确的。我已经在 mysql 终端中将 root 的插件更改为 mysql_native_password。我认为 server: 部分是错误的,我尝试将其注释掉但仍然没有连接。我没有 SQL Server Management Studio,也没有找到通过终端获取我的 sql server 名称的方法。我已经看到了一些示例,这些示例似乎涵盖了您需要为 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;
};

标签: javascriptmysqlsql-servernode.jsrest

解决方案


看起来您的 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: '...'
})

请注意,您目前同时拥有hostand server,看起来 onlyserver是必需的。此外,server: 'mysql'如果您连接到 MSSQL 数据库,也没有任何意义。

来源:node-mssql 文档


推荐阅读