Javascript 在Heroku上部署Node.js、express、knex应用程序-未经处理的拒绝错误:池已销毁
这里的超级大noob 4周前才开始编码,所以如果这个问题非常无知,我很抱歉 我正在Heroku上部署这个小型node.js express和knex web应用程序。当地一切都运转良好。我已经从命令行成功创建了应用程序,所有页面都呈现出来。我已经在Heroku上创建了PostgreSQL数据库,并且成功地执行了迁移,因此我的表都已设置好。但是,当我尝试提交一个表单(假设该表单将向数据库中插入数据)时,日志中不断出现以下错误: 2017-06-25T06:01:57.360120+00:00应用程序[web.1]:未经处理的拒绝错误:池被破坏2017-06-25T06:01:57.360123+00:00应用程序[web.1]:在Pool.acquire(/app/node\u modules/pool2/lib/Pool.js:162:12)2017-06-25T06:01:57.360124+00应用程序[web.1]:at/app/node\u modules/knex/lib/client.js:268:29 2017-06-25T06:01:57+00应用程序[web.1]:在承诺中执行(/app/node\u modules/bluebird/js/release/Promise.js:300:9)2017-06-25T06:01:57.360125+00:00应用程序[web.1]:在承诺中执行(/app/node\u modules/bluebird/js/release/Promise.js:483:18)2017-06-25T06:01:57.360126+00:00应用程序[web.1]:在新承诺中2017-06-25T06:01:57.360127+00:00应用程序[web.1]:at Client.acquireConnection(/app/node_modules/knex/lib/Client.js:264:21)2017-06-25T06:01:57.360131+00:00应用程序[web.1]:at/app/node_modules/knex/lib/runner.js:188:47 2017-06-25T06:01:57.360132+00:00应用程序[web.1]:at Promise.\u执行(/app/node_modules/bluebird/js/release/debugability/js:300:9)2017-06-25T06:01:57.360134+00:00应用程序[web.1]:at/app/node_modules/knex/lib/runner.js:187:35 2017-06-25T06:01:57.360133+00:00应用程序[web.1]:at new Promise(/app/node_modules/bluebird/js/release/Promise/Promise.js:79:10)2017-06-25T06:01:57.360135+00:00应用程序[web.1]:at Function.Promise.try]:at Function.promission.try(/app/app/node/u modules/bluebird/js/bluebird/js/js2017-06-25T06:01:57.360132+00:00应用程序[web.1]:在承诺中。(从执行者(/app/node_modules/bluebird/js/release/Promise.js:483:18)2017-06-25T06:01:57.360134+00:00应用程序[web.1]:在tryCatcher(/app/node_modules/bluebird/js/release/util.js:16:23)2017-06-25T06:01:57.360136+00:00):应用程序[web.1]:在Runner.run.run(/app/node_modules/knex/lib/runner.js:41:44)2017-06-25T06:01:57.360136+00:00应用程序[web.1]:在runner.com重新连接(/app/node_modules/knex/lib/runner.js:186:39)2017-06-25T06:01:57.360137+00应用程序[web.1]:在QueryBuilder.Target.then(/app/node_modules/knex/lib/interface.js:32:43) 我已经阅读了关于Heroku的教程,并阅读了他们的节点文档。我没有设置Procfile,因为我从阅读中了解到它不是必需的 这是我的Knex配置:Javascript 在Heroku上部署Node.js、express、knex应用程序-未经处理的拒绝错误:池已销毁,javascript,node.js,heroku,knex.js,Javascript,Node.js,Heroku,Knex.js,这里的超级大noob 4周前才开始编码,所以如果这个问题非常无知,我很抱歉 我正在Heroku上部署这个小型node.js express和knex web应用程序。当地一切都运转良好。我已经从命令行成功创建了应用程序,所有页面都呈现出来。我已经在Heroku上创建了PostgreSQL数据库,并且成功地执行了迁移,因此我的表都已设置好。但是,当我尝试提交一个表单(假设该表单将向数据库中插入数据)时,日志中不断出现以下错误: 2017-06-25T06:01:57.360120+00:00应用程
production: {
client: 'pg',
connection: process.env.DATABASE_URL + '?ssl=true',
debug: true,
pool: {
min: 2,
max: 10
},
migrations: {
directory: './db/migrations',
tableName: 'migrations'
}
}
这是我的server.js:
"use strict";
if (process.env.NODE_ENV !== 'production') require('dotenv').config();
const PORT = process.env.PORT || 8080;
const ENV = process.env.ENV || "development";
const express = require("express");
const bodyParser = require("body-parser");
const sass = require("node-sass-middleware");
const app = express();
var pg = require('pg');
const knexConfig = require("./knexfile");
const knex = require("knex")(knexConfig[ENV]);
const morgan = require('morgan');
const knexLogger = require('knex-logger');
// Seperated Routes for each Resource
const pollRoutes = require("./routes/poll");
const voteRoutes = require("./routes/vote");
const administrativeRoutes = require("./routes/administrative");
const dbHelper = require("./lib/dbHelper")(knex);
app.use(morgan('dev'));
app.use(knexLogger(knex));
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/styles", sass({
src: __dirname + "/styles",
dest: __dirname + "/public/styles",
debug: true,
outputStyle: 'expanded'
}));
app.use(express.static("public"));
app.get("/", (req, res) => {
res.redirect("/create");
});
app.get("/error", (req, res) => {
res.render('error');
});
// Mount all resource routes
app.use("/create", pollRoutes(dbHelper, process.env));
app.use("/vote", voteRoutes(dbHelper, process.env));
app.use("/administrative", administrativeRoutes(dbHelper));
// Home page
app.listen(PORT, () => {
console.log("Example app listening on port " + PORT);
});
再次感谢您的帮助。在我开始学习这些东西之前,我曾经是一名插图画家,我很高兴为帮助我解决这个问题的人画一幅画像您的
const ENV=process.ENV.ENV | | |“开发”;
一直致力于“开发”这是因为您将条件语句放在server.js的顶部
将此更改为:
const ENV = process.env.NODE_ENV || 'development'
你可以
console.log
你的knex
和ENV
常量来调试它们。谢谢你的回答!我确实解决了这个问题,回来给我的问题添加了一个答案,但我一定没有正确给出答案。我实际上只需要设置一个Heroku配置变量:Heroku配置:set ENV=production代码>和我的数据库是这样连接的。但你是对的,这是一个环境设置不正确的问题。