【发布时间】:2022-01-10 18:20:22
【问题描述】:
我似乎有两个不同的问题。我的应用程序在本地运行,但不在 heroku 上。如果我尝试运行“heroku local”,它会在 localhost:5000 上打开 nodeJS 应用程序并连接到本地数据库。如果我尝试在 heroku 上部署它,它会根据构建日志构建并安装所有内容,但不会运行任何内容。日志显示生产连接字符串(Heroku postgres),但出现错误:ECONNREFUSED 127.0.0.1:5432。对于角度,我认为我提供的静态页面是错误的,但我无法弄清楚。感谢您的帮助。
app.js
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
require('./controllers/db')
var indexRouter = require('./routes/index');
var covidRouter = require('./routes/covid');
var trafficRouter = require('./routes/traffic');
var mobilityRouter = require('./routes/mobility');
var app = express();
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public', 'build')));
console.log(__dirname)
app.use('/', (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
res.header('Access-Control-Expose-Headers', 'X-Total-Count');
res.header('Access-Control-Allow-Methods', 'DELETE, POST, PUT, GET');
next();
});
app.use('/', indexRouter);
app.use('/covid', covidRouter);
app.use('/traffic', trafficRouter);
app.use('/mobility', mobilityRouter);
// const distFolder = isProduction?:'build';
app.use("/*",function(req,res){
res.sendFile(path.join(__dirname,'..','public','dist', 'index.html'));
});
// Obvladovanje napak zaradi avtentikacije
app.use((err, req, res, next) => {
if (err.name == "UnauthorizedError") {
res.status(401).json({"sporocilo": err.name + ": " + err.message});
}
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
app.use(function(req, res, next) {
next(createError(404));
});
module.exports = app;
db.js
const connectionString = 'postgresql://postgres:postgres@127.0.0.1:5432/postgres';
const connectionStringProd = 'dbConnectionStringHidden'
//(database = "postgres", user='postgres', password='postgres', host='127.0.0.1', port= '5432')
let isProduction = (process.env.NODE_ENV === 'production');
const pool = isProduction ? new Pool({connectionStringProd}) : new Pool({connectionString})
if (isProduction) {
console.log("Prod")
console.log(pool)
} else {
console.log("Dev")
console.log(pool)
}
async function query(query, params) {
const {rows, fields} = await pool.query(query, params);
return rows;
}
module.exports = {
query
}
【问题讨论】:
-
您需要在 Web 服务器上安装并运行数据库才能使其正常工作。我想在松散耦合的云场景中,您的数据库将完全位于不同的主机上,而不是 127.0.0.1
-
我在 heroku 上运行了 postgres 基础,我可以通过 pgAdmin 访问它。我还将它设置为 db.js 中的 connectionStringProd,当我将其部署到 heroku 时会显示它
标签: node.js angular postgresql express heroku