我对Express.js非常陌生,但是现在我已经创建了SQL Server DB的api。它在localhost上运行良好,但是现在,我已经在Heroku上进行了部署。当我的CMD提示符打开时,我的api正常工作,但是当它关闭时,出现内部服务器错误。
以前,我使用Mongo作为数据库,猫鼬创建了一个测试,并将其部署到Heroku,即使提示未打开,该API仍然可以正常工作。有人知道我是否必须像创建猫鼬一样创建另一个.js文档,否则要保持我的api正常工作?
这是我在.js文档(server.js)上的代码:
const express = require('express');
const bodyParser = require('body-parser');
const sql = require('mssql');
const app = express();
app.use(bodyParser.json());
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
next();
});
const dbConfig = {
user: "daUser",
password: "daPass",
server: "daServer",
database: "DaDB"
}
const executeQuery = function (res, query) {
sql.connect(dbConfig, function (err) {
if (err) {
console.log(err);
res.send(err);
}
else {
// create Request object
var request = new sql.Request();
// query to the database
request.query(query, function (err, result) {
if (err) {
console.log(err);
res.send(err);
}
else {
res.send(result);
}
});
}
});
}
app.get("/api/HolidayBaseApi", function (req, res) {
var query = "SELECT * FROM [HolidaysBase]";
executeQuery(res, query);
})
const PORT = process.env.PORT || 8080
app.listen(PORT, () => {
console.log("App now running on port", PORT);
});
我的package.json下一个:
{
"name": "holidaysbaseapi",
"version": "1.0.0",
"description": "Api of Holidays",
"main": "server.js",
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Chuck Villavicencio",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.4",
"mssql": "^4.3.0"
},
"engines": {
"node": "8.11.3",
"npm": "5.6.0"
}
}
在Heroku上,我已经安装了Heroku CLI;登录后,克隆存储库并部署我的更改。
我正在使用Express.js,Node,SQL Server和Heroku
答案 0 :(得分:0)
问题是您的SQL Server数据库是在本地计算机上创建的,而heroku无法连接到它。您可以使用heroku提供的postgresDB,也可以在互联网上的任何提供程序中创建sql服务器数据库,并将dbConfig替换为该数据库的配置