Javascript 使用带有Node.js的REST api服务器连接到我的sql数据库时出现问题

Javascript 使用带有Node.js的REST api服务器连接到我的sql数据库时出现问题,javascript,mysql,sql-server,node.js,rest,Javascript,Mysql,Sql Server,Node.js,Rest,一般来说,我对编写服务器和javascript代码非常陌生,但我目前正在尝试设置一个restapi服务器并将其连接到我的sql数据库,目前我正在本地完成所有工作。我在运行Ubuntu18.04的同时使用NodeJS。我已经能够成功地创建一个RESTAPI,并通过网页的url或与Postman连接到它。我通过cmd终端创建了一个sql server数据库,并在其上创建了测试数据。我一直在看将RESTAPI连接到数据库的指南,但我认为我提供给要连接的api的信息就是我的问题所在。我从下面的serve

一般来说,我对编写服务器和javascript代码非常陌生,但我目前正在尝试设置一个restapi服务器并将其连接到我的sql数据库,目前我正在本地完成所有工作。我在运行Ubuntu18.04的同时使用NodeJS。我已经能够成功地创建一个RESTAPI,并通过网页的url或与Postman连接到它。我通过cmd终端创建了一个sql server数据库,并在其上创建了测试数据。我一直在看将RESTAPI连接到数据库的指南,但我认为我提供给要连接的api的信息就是我的问题所在。我从下面的server.js开始,其中有一个文件夹控制器和一个ProductController.js文件,我在其中处理route/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”部分。当我试图在postman中获取此数据时,它会显示我设置的错误“插入数据时出错”。因此,我相信在运行时,我不会从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_密码。我认为服务器:部分是错误的,我已经试着注释出来,但仍然没有连接。我没有SQL Server Management Studio,也没有找到通过终端获取SQL Server名称的方法。我看到过一些例子,这些例子似乎涵盖了您需要向api提供哪些信息才能进行连接。如果有人对此也有见解,我们也将不胜感激。我的最终目标是最终为数据库创建GET和POST路由,并创建一个操作POST数据的函数,但目前我只是尝试将事情连接起来,以便可以处理正在获取的数据。感谢您提供的任何见解,我们非常感谢

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

    return conn;
};

您的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: '...'
})
请注意,您当前既有
主机
又有
服务器
,看起来只需要
服务器
。另外,如果您连接到MSSQL数据库,
服务器:“mysql”
也没有意义


来源:

要诊断错误,您应该在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"
}

另外,我的connect.js文件位于一个名为connection的文件夹中,再次感谢大家