在我的 Express 应用程序中运行以下代码时出现上述错误。当我访问 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 应用程序中,但出现了此错误。
如果错误不包含属性状态,请在错误处理程序中间件中设置默认状态。
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!');
});
就我而言,发生这种情况是因为我没有在我的请求中提供授权:)
如果您使用 ejs 创建模板,请使用 res.render() ;
就我而言,我试图在自定义错误类中设置后备值,如下所示:
// apiError.js
class ApiError extends Error {
constructor(message, source, statusCode) {
super();
this.statusCode = statusCode || 500;
this.message = message;
this.source = source || 'Unknown';
}
}
但实际问题出在发送响应时的自定义错误中间件中:
// apiErrorHandler.js
import logger from '../util/logger.js';
const apiErrorHandler = function (error, req, res, next) {
if (error.source) {
logger.error(`${error.message} -----> ${error.source}`);
}
res.status(error.statusCode ?? 500).json({ // I was missing this ?? 500 as a fallback value
status: 'error',
statusCode: `${error.statusCode}` ?? 500,
stack: error.stack,
});
};
export default apiErrorHandler;