【问题标题】:NodeJS app on Glitch is not connecting to remote SQL ServerGlitch 上的 NodeJS 应用程序未连接到远程 SQL Server
【发布时间】:2021-11-03 09:50:36
【问题描述】:

我在连接到 SQL Server 实例时收到此错误。我在https://glitch.com/ 主机上运行它:

无法连接到 .net:1433 - 自签名证书

代码:

app.get("/api/products", function(req, res) { 获取产品();

函数 getProducts() { var dbConfig = { 用户:“dbUser”, 密码:“dbPassword”, 服务器:“服务器地址”, 数据库:“dbName”, };

var dbConn = new sql.ConnectionPool(dbConfig);
dbConn
  .connect()
  .then(function() {
    var request = new sql.Request(dbConn);
    request
      .query("select top 20 * from product")
      .then(function(resp) {
        res.send(resp);
        dbConn.close();
      })
      .catch(function(err) {
        res.send(err);
        dbConn.close();
      });
  })
  .catch(function(err) {
    res.send(err);
  });
}
});

【问题讨论】:

  • 你试过设置dbConfig.options.trustServerCertificate: true了吗?
  • unction getProducts() { var dbConfig = { user: "user", password: "password", server: "server", database: "dbName", options: { trustServerCertificate: true }, 登陆在一个错误中。没有运气
  • 出现错误?什么错误?请Edit您的问题与此新信息 - 作为文本。

标签: node.js sql-server


【解决方案1】:

请检查您是如何将trustServerCertificate: true 设置编辑到dbConfig 中的。

这是一个使用 Docker 容器为 mcr.microsoft.com/mssql/server:2019-latestnode:16 复制问题中的错误的示例:

//server.js
'use strict';
const express = require('express');
const sql = require('mssql');
const app = express();

app.get("/api/products", (req, res) => {
  getProducts();
  function getProducts() {
    var dbConfig = {
      user: "sa",
      password: "StrongPassw0rd",
      server: "foo-db",
      database: "msdb"
    };
    var dbConn = new sql.ConnectionPool(dbConfig);
    dbConn
      .connect()
      .then(function () {
        var request = new sql.Request(dbConn);
        request
          .query("select top 1 object_id, name from sys.tables order by name")
          .then(function (resp) {
            res.send(resp.recordset);
            dbConn.close();
          })
          .catch(function (err) {
            res.send(err);
            dbConn.close();
          });
      })
      .catch(function (err) {
        res.send(err);
      });
  }
});

const UTC_NOW = () => (new Date()).toISOString();
const HOST = '0.0.0.0';
const PORT = 80;
app.listen(PORT, HOST, () => {
  console.log(`${UTC_NOW()} Listening on http://${HOST}:${PORT}`);
});

打开网络浏览器访问 http://localhost/api/products 会产生响应:

{
    "code": "ESOCKET",
    "originalError": {
        "message": "Failed to connect to foo-db:1433 - self signed certificate",
        "code": "ESOCKET"
    },
    "name": "ConnectionError"
}

如果我们改用以下 dbConfig:

    var dbConfig = {
      user: "sa",
      password: "StrongPassw0rd",
      server: "foo-db",
      database: "msdb",
      options: {
        trustServerCertificate: true
      }
    };

那么网页浏览器的响应是:

[
    {
        "object_id": 1561772621,
        "name": "autoadmin_managed_databases"
    }
]

【讨论】:

  • 谢谢,已排序问题
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多