使用 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
或尝试使用现有节点版本以外的任何版本。
我正在学习成为 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 上的
切换到节点版本 10.11.0
或尝试使用现有节点版本以外的任何版本。