Javascript 使用带有Node.js的REST api服务器连接到我的sql数据库时出现问题
一般来说,我对编写服务器和javascript代码非常陌生,但我目前正在尝试设置一个restapi服务器并将其连接到我的sql数据库,目前我正在本地完成所有工作。我在运行Ubuntu18.04的同时使用NodeJS。我已经能够成功地创建一个RESTAPI,并通过网页的url或与Postman连接到它。我通过cmd终端创建了一个sql server数据库,并在其上创建了测试数据。我一直在看将RESTAPI连接到数据库的指南,但我认为我提供给要连接的api的信息就是我的问题所在。我从下面的server.js开始,其中有一个文件夹控制器和一个ProductController.js文件,我在其中处理route/api/productsJavascript 使用带有Node.js的REST api服务器连接到我的sql数据库时出现问题,javascript,mysql,sql-server,node.js,rest,Javascript,Mysql,Sql Server,Node.js,Rest,一般来说,我对编写服务器和javascript代码非常陌生,但我目前正在尝试设置一个restapi服务器并将其连接到我的sql数据库,目前我正在本地完成所有工作。我在运行Ubuntu18.04的同时使用NodeJS。我已经能够成功地创建一个RESTAPI,并通过网页的url或与Postman连接到它。我通过cmd终端创建了一个sql server数据库,并在其上创建了测试数据。我一直在看将RESTAPI连接到数据库的指南,但我认为我提供给要连接的api的信息就是我的问题所在。我从下面的serve
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*FROM data”部分。当我试图在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_native_密码。我认为服务器:部分是错误的,我已经试着注释出来,但仍然没有连接。我没有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;
};
您的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: '...'
})
请注意,您当前既有主机
又有服务器
,看起来只需要服务器
。另外,如果您连接到MSSQL数据库,服务器:“mysql”
也没有意义
来源:要诊断错误,您应该在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"
}
另外,我的connect.js文件位于一个名为connection的文件夹中,再次感谢大家