使用带有node.js的restapi服务器连接到我的sql数据库的问题

k7fdbhmy  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(358)

一般来说,我对编写服务器和javascript代码非常陌生,但我目前正在尝试设置restapi服务器并将其连接到我的sql数据库,目前我正在本地完成所有工作。我正在运行ubuntu18.04,同时使用node js。我已经能够成功地创建一个restapi并通过网页的url或postman连接到它。我已经通过cmd终端创建了一个sqlserver数据库,并在上面创建了测试数据。我一直在看将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*fromdata”部分。当我试图在 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\u native\u密码。我认为服务器:部分是错误的,我试着评论出来,但仍然没有连接。我没有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;
};
z2acfund

z2acfund1#

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

zz2j4svz2#

您的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文档

相关问题