首页 > 解决方案 > 使用 Express.js 将 SQL Server api 部署到 Heroku

问题描述

我对 Express.js 很陌生,但现在我已经创建了 SQL Server DB 的 api。它在 localhost 上运行良好,但现在,我已经部署在 Heroku 上。当我的 CMD 提示打开时,我的 api 工作正常,但是当它关​​闭时,我得到一个内部服务器错误。

以前,我使用 Mongo 作为 DB 创建了一个测试,mongoose 并部署到 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

标签: node.jssql-serverexpressheroku

解决方案


问题是您的 SQL 服务器数据库是在您的本地计算机上创建的,heroku 无法连接到它。您可以使用 heroku 提供的 postgresDB 或在 Internet 上的任何提供商中创建 sql server db,并将 dbConfig 替换为该 db 的配置


推荐阅读