javascript - 使用带有 Node.js 的 REST api 服务器连接到我的 sql 数据库的问题
问题描述
一般来说,我对编码服务器和 javascript 非常陌生,但我目前正在尝试设置一个 REST api 服务器并将其连接到我的 sql 数据库,目前我正在本地做所有事情。我在使用节点 js 时运行 ubuntu 18.04。我已经能够成功创建一个 REST api 并通过网页的 url 或 Postman 连接到它。我通过我的 cmd 终端创建了一个 sql server 数据库,并在其上创建了测试数据。我一直在查看将 REST api 连接到数据库的指南,但我认为我给 api 连接的信息是我的问题发生的地方。我从下面这个作为我的 server.js 开始,我有一个文件夹 Controller 和一个 ProductController.js 文件,我正在处理路由 /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 数据库中的表被称为“数据”,因此是“SELECT * FROM 数据”部分。当我尝试在邮递员中获取此数据时,它会显示我设置的错误“插入数据时出错”。所以我相信在运行时我没有从 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_password。我认为 server: 部分是错误的,我尝试将其注释掉但仍然没有连接。我没有 SQL Server Management Studio,也没有找到通过终端获取我的 sql server 名称的方法。我已经看到了一些示例,这些示例似乎涵盖了您需要为 api 提供连接的哪些信息。如果有人对此也有见解,那也将不胜感激。我的最终目标是最终为数据库创建 GET 和 POST 路由以及一个操作 POST 数据的函数,但现在我只是想把事情连接起来,这样我就可以玩弄被 GET 的数据。感谢您提供的任何见解,非常感谢。
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: '...'
})
请注意,您目前同时拥有host
and server
,看起来 onlyserver
是必需的。此外,server: 'mysql'
如果您连接到 MSSQL 数据库,也没有任何意义。
推荐阅读
- vue.js - VuePress 主题继承设置
- python - 转换为估计器时的 LSTM InvalidArgumentError Tensorflow 2.0/Keras
- reactjs - 我可以以及如何使用 laravel 护照保护我的 react-router 路由吗
- reactjs - Firebase 错误:根据用户 UID 上传唯一存储文件夹时,对象“XXX/XXX/XXX.jpg”不存在
- ffmpeg - 将 MP4 转换为图像序列时,FFmpeg 正在丢帧
- linux - 获取运行命令时修改的文件列表的有效方法是什么?
- sql-server - SQL 处理用户每周在周表日历上设置的假期
- ruby-on-rails - 正则表达式:匹配特定字符
- c# - 无法使用向下箭头键迭代自动完成列表
- symfony - 如何在 routes.yaml 中排除特定路由