Как по умолчанию возвращать ошибки в формате JSON вместо HTML с Express? - PullRequest
0 голосов
/ 26 декабря 2018

Express по умолчанию возвращает ошибки в виде HTML-страниц.Поскольку я разрабатываю REST API, я хочу, чтобы все мои ошибки были в формате JSON.Как я могу настроить экспресс для этого?

Я ожидаю, что ответ будет выглядеть примерно так

{
  "statusCode": 404,
  "error": "Not Found"
}

, но вместо этого я получаю

<code><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>
<body>
    <pre>Cannot DELETE /object/

Это мое основное приложение

export const app = express();
app.use(express.json());

app.get("/objects", listObjects);
app.get("/object/:id", getObject);
app.post("/object", createObject);
app.put("/object/:id", updateObject);
app.delete("/object/:id", deleteObject);

ОБНОВЛЕНИЕ: Для пояснения, я не хочу обрабатывать ошибки как мои обработчики как json.Это довольно просто.

Я хочу, чтобы Express прекратил возвращать html-ошибки незарегистрированным обработчикам, например, DELETE on / Assessment или GET on / anUnknownRoute

1 Ответ

0 голосов
/ 26 декабря 2018

Вы можете просто добавить 'Content-Type: application/json' к своим заголовкам ответов и написать в основном все, что вы хотите в формате JSON, например,

function(err, req, res, next){
    res.setHeader('Content-Type', 'application/json');
    res.status(500);
    res.send(JSON.stringify(error));
});

Или вместо этого вы можете использовать res.json.Пожалуйста, смотрите официальный документ для получения более подробной информации: https://expressjs.com/en/api.html#res.json

Если вы хотите возвращать ошибки в JSON по умолчанию , то вас может заинтересовать использование механизма экспресс-обработки ошибок по умолчанию:https://expressjs.com/en/guide/error-handling.html

Просто передайте error обратному вызову next, чтобы перейти непосредственно к обработчику ошибок (пропуская все остальное в очереди между ними) и добавить промежуточное ПО для обработки ошибок в конецваша промежуточная очередь.Это должно сработать.

PS Из express.js FAQ:

В Express 404 ответа не являются результатом ошибки, поэтому промежуточное ПО обработчика ошибок не будет перехватыватьих.Это происходит потому, что ответ 404 просто указывает на отсутствие дополнительной работы;другими словами, Express выполнил все функции и маршруты промежуточного программного обеспечения и обнаружил, что ни одна из них не ответила.Все, что вам нужно сделать, это добавить функцию промежуточного программного обеспечения в самом низу стека (ниже всех других функций) для обработки ответа 404:

app.use(function (req, res, next) {
    res.status(404).send("Sorry can't find that!")
})

Очевидно, вы можете отправить ответ в JSONформат ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...