NODE_ENV =生产时忽略错误处理程序

Ama*_*yla 7 api error-handling json node.js express

我正在使用Node/Express构建一个简单的REST API,当我将其部署到生产环境时,我很难.什么时候NODE_ENV=development,一切都按预期工作.我找回了JSON错误和正确的状态代码.什么时候NODE_ENV=production,我只返回一个带有默认错误消息的HTML页面,而不是其他任何内容.我可以读取状态代码,但我需要访问完整的JSON有效负载以更好地识别错误.这是我的代码:

import Promise from 'bluebird'; // eslint-disable-line no-unused-vars
import express from 'express';
import config from './config';
import routes from './routes';
import { errorMiddleware, notFoundMiddleware } from './middlewares/error.middleware';
import mongoose from './config/mongoose.config';

// create app
const app = express();

(async () => {
  // connect to mongoose
  await mongoose.connect();

  // pretty print on dev
  if (process.env.NODE_ENV !== 'production') {
    app.set('json spaces', 2);
  }

  // apply express middlewares
  app.use(express.json());

  // register v1 routes
  app.use('/v1', routes);

  // catch errors
  app.use(notFoundMiddleware);
  app.use(errorMiddleware);

  // start server
  app.listen(config.port, () => console.info(`server started on port ${config.port}`));
})();

export default app;
Run Code Online (Sandbox Code Playgroud)

这是notFoundMiddleware:

export default (req, res, next) => next(new Error('Not Found'));

这是errorMiddleware:

const errorMiddleware = (err, req, res, next) => {
  console.log('test'); // this works in development, but not in production
  const error = {
    status: err.status,
    message: err.message
  };

  if (err.errors) {
    error.errors = err.errors;
  }

  if (process.env.NODE_ENV !== 'production' && err.stack) {
    error.stack = err.stack;
  }

  return res.status(error.status || 500).send({ error });
};
Run Code Online (Sandbox Code Playgroud)

Sag*_*fan 0

如果您在生产服务器上运行,请尝试使用某些日志记录提供程序(例如“papertrailapp”)来查看应用程序中发生的错误。

在此输入图像描述