Не работает обработчик ошибок
В приложении на express.js не работает middleware для обработки ошибок.
package.json:
{
"name": "platform",
"version": "1.0.0",
"scripts": {
"start:dev": "node src/index.js",
"start:prod": "node src/index.js",
"migrate": "npx sequelize-cli db:migrate"
},
"dependencies": {
"bcrypt": "^5.0.1",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"fs": "^0.0.1-security",
"jsonwebtoken": "^8.5.1",
"mysql2": "^2.3.3",
"nodemon": "^2.0.15",
"path": "^0.12.7",
"sequelize": "^6.12.0-beta.1",
"sequelize-cli": "^6.3.0",
"uuid": "^8.3.2"
}
}
index.js:
const express = require('express');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
app.use(express.json());
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use('/api/user/registration', async (req, res, next) => {
try {
throw new Error();
} catch (e) {
next(e);
}
})
//error handler
app.use((err, req, res) => {
res.status(500).json({ message: 'Custom error' });
});
(async function start() {
try {
app.listen(3010, () => console.log(`Server listen: 3010`))
} catch (e) {
console.log(e);
}
})();
При попытке отправить POST-запрос на localhost:3010/api/user/registration, в консоль логируется ошибка:
Error
at \platform\src\index.js:15:15
at Layer.handle [as handle_request] (\platform\node_modules\express\lib\router\layer.js:95:5)
at next (\platform\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (\platform\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (\platform\node_modules\express\lib\router\layer.js:95:5)
at node_modules\express\lib\router\index.js:281:22
at Function.process_params (\platform\node_modules\express\lib\router\index.js:335:12)
at next (\platform\node_modules\express\lib\router\index.js:275:10)
at \platform\node_modules\body-parser\lib\read.js:130:5
at invokeCallback (\platform\node_modules\raw-body\index.js:224:16)
В чём может быть проблема?
Ответы (2 шт):
Автор решения: DiD
→ Ссылка
Проблема в том, что именно вы посылаете запросом POST, в каком формате и в какой кодировке
app.use(express.json());
у JSON очень привередливый синтаксис. В случае первого же символа, не вписывающегося в синтаксис JSON, прога будет выдавать исключения.
Автор решения: Alexey Ten
→ Ссылка
В документации на чистом английском написано чтобы обработчика ошибок должно быть 4 аргумента. Иначе как экспресс должен его отличить от обычной мидлвари?