Скрыть ошибки синтаксического анализа JSON в Express POST - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть этот маленький сервер Express:

var express = require("express");

var app = express();
app.use(express.json());

app.post("/hackme", (req, res) => {

    if(!req.body.foo) {
        return res.send({ error: 'oh no' });
    }

    return res.send({ lbxapi: '1.1' });
});

app.listen(3050, function() {
  console.log("Express running");
});

Когда я отправляю недопустимое тело JSON POST на следующий сервер, я получаю полный стек ошибок:

<code><!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error</title>
    </head>
    <body>
        <pre>SyntaxError: Unexpected string in JSON at position 18
            <br> &nbsp; &nbsp;at JSON.parse (&lt;anonymous&gt;)
            <br> &nbsp; &nbsp;at parse (/home/jan/Desktop/linkbox_beta2_github/code/experiments/node_modules/body-parser/lib/types/json.js:89:19)
            <br> &nbsp; &nbsp;at /home/jan/Desktop/linkbox_beta2_github/code/experiments/node_modules/body-parser/lib/read.js:121:18
            <br> &nbsp; &nbsp;at invokeCallback (/home/jan/Desktop/linkbox_beta2_github/code/experiments/node_modules/raw-body/index.js:224:16)
            <br> &nbsp; &nbsp;at done (/home/jan/Desktop/linkbox_beta2_github/code/experiments/node_modules/raw-body/index.js:213:7)
            <br> &nbsp; &nbsp;at IncomingMessage.onEnd (/home/jan/Desktop/linkbox_beta2_github/code/experiments/node_modules/raw-body/index.js:273:7)
            <br> &nbsp; &nbsp;at IncomingMessage.emit (events.js:182:13)
            <br> &nbsp; &nbsp;at endReadableNT (_stream_readable.js:1091:14)
            <br> &nbsp; &nbsp;at process._tickCallback (internal/process/next_tick.js:174:19)
        

Я не хочу, чтобы пользователь видел это. Как я могу это скрыть? Будет принят ответ, который изменит код моего сервера так, что я его больше не вижу. Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Благодаря комментарию Ариэля Альварадо (= с помощью обработчика ошибок по умолчанию) я могу ответить на свой вопрос:

var express = require("express");

var app = express();
app.use(express.json());

// added this error handler
app.use(function (err, req, res, next) {
    console.error(err.stack)
    res.status(500).send('Something broke!')
});

app.post("/hackme", (req, res) => {

    if(!req.body.foo) {
        return res.send({ error: 'oh no' });
    }

    return res.send({ lbxapi: '1.1' });
});

app.listen(3050, function() {
console.log("Express running");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...