【问题标题】:getting RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined in express app获取 RangeError [ERR_HTTP_INVALID_STATUS_CODE]:无效状态代码:快递应用中未定义
【发布时间】:2018-08-18 23:47:36
【问题描述】:

在我的快速应用程序中运行以下代码时出现上述错误。当我去 localhost:3000/cards.

这是在我的 cards.js 文件中。

const express = require('express');
const router = express.Router();
const { data } = require('../data/flashcardData.json');
const { cards } = data;

router.get('/', (req, res) => {
res.render('card', {
prompt: cards[0].question,
hint: cards[0].hint
 });
});

module.exports = router;

这是我的 app.js 文件中的代码。

const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');

const app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

 app.set('view engine', 'pug');

 const mainRoutes = require('./routes');
 const cardRoutes = require('./routes/cards');

 app.use(mainRoutes);
 app.use('/cards', cardRoutes);

 app.use((req, res, next) => {
 const err = new Error('Not Found');
 err.status = 404;
 next(err);
 });

app.use((err, req, res, next) => {
res.locals.error = err;
res.status(err.status);
res.render('error');
});

 app.listen(3000, () => {
 console.log('The application is running on localhost:3000!');
 });

任何帮助将不胜感激。基本上,我正在尝试将一个 json 文件合并到 express 应用程序中,但它会出现此错误。

【问题讨论】:

  • 我认为你的卡片控制器抛出了一个没有状态属性的错误,因此 express 得到一个未定义的状态。添加类似这样的内容:const status = err.status || 500; res.status(status);
  • 我应该在哪里添加?
  • 我添加了答案

标签: javascript json express pug


【解决方案1】:

如果错误不包含属性状态,请在错误处理程序中间件中设置默认状态。

const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');

const app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

app.set('view engine', 'pug');

const mainRoutes = require('./routes');
const cardRoutes = require('./routes/cards');

app.use(mainRoutes);
app.use('/cards', cardRoutes);

app.use((req, res, next) => {
  const err = new Error('Not Found');
  err.status = 404;
  next(err);
});

app.use((err, req, res, next) => {
  res.locals.error = err;
  const status = err.status || 500;
  res.status(status);
  res.render('error');
});

app.listen(3000, () => {
  console.log('The application is running on localhost:3000!');
});

【讨论】:

  • 这个 const status = err.status || 500;帮助了我:) 非常感谢
  • 如果 err.status 是无效的(因为错字),比如 err.status=1 或 24,该怎么办
  • Express 会抛出错误并发送状态码 500 + 消息 + 堆栈。如果您想发送自定义响应,您有 3 个选项:1. 在 try/catch 中包装 res.status(),2. 使用第二个错误中间件,3. 根据内置的 http.STATUS_CODES 列表验证状态。
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 2023-02-11
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多