javascript - Express 返回服务器的自动 HTML 错误页面,而不是我的 res.json 错误消息

标签 javascript node.js express error-handling plesk

我在 Express 服务器上有一个 REST api,在前端有一个 React 应用程序。我设计它是为了在遇到错误时将 JSON 发送到前端,它会发送它,我可以使用它作为模式等在客户端打印错误。这是我的用户/登录路由文件(我还使用 JWT 和 bcrypt 来解决密码问题):

router.post("/login", (req, res) => {
  const { email, password } = req.body;

  //simple validation
  if (!email || !password) {
    return res.status(400).json({ general: "Email and Password can not be empty" });
  }

  //check for existing user
  User.findOne({ email }).then((err, user) => {
    if (!user)
      return res.status(400).json({ email: "This user doesn't exist"});
    if (err) console.log(err);
    //Validate password
    bcrypt.compare(password, user.password).then(isMatch => {
      if (!isMatch)
        return res
          .status(400)
          .json({ password: "Password and User name are not match!" });

      jwt.sign(
        { id: user.id },
        config.get("jwtSecret"),
        { expiresIn: 3600 },
        (err, token) => {
          if (err) throw err;
          res.json({
            token,
            user: {
              id: user.id,
              name: user.name,
              email: user.email,
              sort: user.sort
            }
          });
        }
      );
    });
  });
});

和我的 app.js:

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const config = require("config");

const app = express();

//Bodyparser Middleware
app.use(bodyParser.json());

// DB config

const db = config.get("mongoURI");

//connect to Mongo
mongoose
  .connect(db)
  .then(() => console.log("MongoDB Connected..."))
  .catch(err => console.log(err));

//Use routes
app.use("/api/test", require("./routes/api/test"));
app.use("/api/users", require("./routes/api/users"));
app.use("/api/tickets", require("./routes/api/tickets"));


const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server started on port ${port}`));

在本地主机上没有问题。但是上传到服务器后,当我留空或提交错误密码等时,它永远不会发送我的 JSON 响应,而是返回服务器 Html 页面。我 console.logged 返回错误响应,如下所示:

enter image description here

如何用我自己的 JSON 错误消息替换 Html 响应?

最佳答案

默认错误处理程序将错误显示为 HTML 页面。

参见https://expressjs.com/en/guide/error-handling.html

您可以覆盖默认的错误处理程序。尝试将其添加到 app.js 的末尾。

// catch 404 and forward to error handler
app.use(function (req: express.Request, res: express.Response, next) {
    next({ status: 404 });
});

app.use(function (err: any, req: express.Request, res: express.Response, next: express.NextFunction) {
    console.error(err);
    res.status(err.status || 500).json();
});

关于javascript - Express 返回服务器的自动 HTML 错误页面,而不是我的 res.json 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60487409/

相关文章:

javascript - 使用 forEach 通过 push 方法创建另一个数组,但循环结束后数组为空

node.js - 我可以让我的 nodejs/express/jade 堆栈报告合理的语法错误吗?

node.js - Mongoose $lookup 聚合无法按预期工作

javascript - 使用导出类时在 Eclipse 中折叠方法

javascript - 使用 React/React Flexbox Grid 的两列(一列固定,一列滚动)

javascript - 来自 Image 的 Chromium createObjectUrl 输出为 net::ERR_FILE_NOT_FOUND

javascript - MongoDB collection.find() 查询挂起

javascript - 如何在执行页内脚本之前操作 DOM?

node.js - 解析具有强大文件名的表单值

node.js - 无法启动nodejs+express基本程序