使用 NodeJS 连接 Azure 上的 SQL 数据库

Connecting SQL database on Azure with NodeJS

我正在学习成为 NodeJS、Express、EJS 的全栈 Web 开发人员。现在我快完成课程了,我想我应该开始我的梦想项目,即为我们当地的小型非营利图书馆(约 6500 本书)创建一个网络应用程序。 Web 应用程序上最大的功能是浏览集合。他们正在使用 SQL 数据库并提供了一个 mbd 文件供使用。我创建了一个 Azure SQL 服务器和数据库,并通过几次操作将数据库文件上传到那里。我看到了所有的表,可以查询它,一切看起来都在那里。

现在我正在尝试弄清楚如何将 Azure 数据库连接到 NodeJS(这是我唯一熟悉的后端),这样我就可以从 Azure 数据库中获取数据并开始使用 React 构建前端。

我按照 https://www.youtube.com/watch?v=Uvy_BlgwfLI 教程创建了以下应用程序。当我创建它时它工作正常但现在我再次打开它(从相同的 IP 地址),我的 http://localhost:1433/main 说不能 GET/main,Hello World 的主路由工作正常。

我在控制台中收到以下消息: Main Books API is 运行 on port1433 (节点:14700)[DEP0066]弃用警告:OutgoingMessage.prototype._headers 已弃用 (使用 node --trace-deprecation ... 显示创建警告的位置)

这是我的文件: ------------------------------package.json

{
  "name": "dbname",
  "version": "1.0.0",
  "main": "api.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon run"
  },
  "dependencies": {
    "body-parser": "^1.19.1",
    "cors": "2.8.1",
    "express": "~4.0.0",
    "fs": "^0.0.1-security",
    "http": "^0.0.1-security",
    "mssql": "^6.2.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.4"
  },
  "author": "my name",
  "license": "MIT",
  "keywords": [],
  "description": ""
}

-------------------------------------api.js

const dboperations = require("./dboperations");
let db = require("./dboperations");
let Main = require("./main");
const bodyParser = require('body-parser');
const http = require("http");
const fs = require("express");


const express = require("express");
const cors = require("cors");

const app = express();
const router = express.Router();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());
app.use("/api", router);

app.get('/', function (req, res) {
    res.send('hello world')
  })

router.use((request, response, next)=>{
    console.log("middleware");
    next();
})

router.route("/main").get((request, response)=>{
    dboperations.getMain().then(result=>{
    console.log(result);
    //response.json(result);
})
})

let port = process.env.PORT || 1433;
app.listen(port);
console.log("Main Books API is running on port" + port);

-----------------------------bdconfig.js

const config = {
    user: "user",
    password: "password",
    server: "servername",
    database: "dbname",
    options:{
        encrypt: true,
        
    },
    port: 1433
}

module.exports = config;

--------------------dboperations.js

var config = require("./dbconfig");
const sql = require("mssql");


async function getMain(){
    try{
        let pool = await sql.connect(config);
        let products = await pool.request().query("SELECT * from dbo.tblMain");
        return products.recordset;

    }
    catch(error){
        console.log(error);
    }
}

module.exports = {
    getMain: getMain
}

--------------------main.js

class Main {
    constructor (ID, Book, Volume, Author){
        this.ID = ID, 
        this.Book = Book, 
        this.Volume = Volume, 
        this.Author = Author, 
        
    }
}

module.exports = Main;

如果您能帮助我理解我做错了什么以及如何开始使用 Azure 数据库和 Node(也许是其他 way/modules?),我将不胜感激。对我应该做什么的任何建议都表示赞赏,并且任何 resources/tutorials!百万感谢。

如 Whosebug 上的 by ch1pn3ss 所述。发生此错误是因为节点版本。

切换到节点版本 10.11.0 或尝试使用现有节点版本以外的任何版本。