【问题标题】:Setup error handlers in express/mongoose/mongoDB在 express/mongoose/mongoDB 中设置错误处理程序
【发布时间】:2021-08-29 21:25:27
【问题描述】:

我目前是 Web 开发训练营的一员,我当前的项目要求我以我不理解的特定方式创建错误处理程序。下面是路线的截图。 . .

这是我目前的文件,希望它有意义。 . .

/* app.js */    

const express = require('express');
const mongoose = require('mongoose');
const userRouter = require('./routes/users');
const cardRouter = require('./routes/cards');

const { PORT = 3000 } = process.env;
const app = express();

mongoose.connect('mongodb://localhost:27017/aroundb', {
  useNewUrlParser: true,
  useCreateIndex: true,
  useFindAndModify: false,
  useUnifiedTopology: true,
});

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use((req, res, next) => {
  req.user = { _id: '60c4e0e2a80be4c8c2de5474' };
  next();
});

app.use('/users', userRouter);
app.use('/cards', cardRouter);

app.listen(PORT, () => logMsg(`listening on port ${PORT} . . .`));


/* routes/users.js */

const express = require('express');
const { getUsers, getUser, createUser } = require('../controllers/users');

const router = express.Router();

router.get('/', getUsers);
router.get('/:id', getUser);
router.post('/', createUser);

module.exports = router;


/* controllers/users.js */

const User = require('../models/user');
module.exports.getUsers = (req, res) => {
  User.find({})
    .then((users) => res.status(200).send({ data: users }))
    .catch((err) => res.status(500).send({ message: err }));
};
module.exports.getUser = (req, res, next) => {
  User.findById(req.params.id)
    .then((user) => res.send({ data: user }))
    .catch((err) => res.status(404).send({ message: err }));
};
module.exports.createUser = (req, res) => {
  const { name, about, avatar } = req.body;
  User.create({ name, about, avatar })
    .then((user) => res.status(201).send({ data: user }))
    .catch((err) => res.status(400).send({ message: err }));
};

我的问题是:

  1. 提供的代码示例(在屏幕截图中)应该放在哪里?我是在创建单独的控制器或中间件吗?或者它可能进入已经编码的控制器中?
  2. 我会创建自己的错误并使用条件来阅读消息吗?
  3. 我已经认为我正在处理错误,如 controllers/users.js 中所示,不是这样吗?

注意:抱歉,我知道由于它来自课程,因此在课程上下文之外可能没有意义。我也知道可以通过多种方式对项目进行编码/解决。不幸的是,我的训练营没有现场指导,只是一个闲散的频道,97% 的回复来自校友。请不要犹豫,提出可能有助于澄清问题的问题。

【问题讨论】:

    标签: mongodb express mongoose error-handling routes


    【解决方案1】:

    您似乎在最后两种情况下直接发送了一个错误,但不知道它是哪种类型,但是它看起来可以获取所有用户(第一种情况)。

    可能对您有所帮助的解决方法是,

    Get user : 
    
     User.findById(req.params.id), function(err, user) {
         if(err) {
           return res.status(500).send({ message: "Default error" });
         } else if (!user) {
           return res.status(404).send({ message: "User not found" });
         }
     }
    

    要创建用户,您需要手动验证架构中所需的所有字段,例如,

    createUsers : {
     const { name, about, avatar } = req.body;
    
     if (name === null || about === null || avatar === null) {
       return res.status(400).send({
         message : "Required data missing in request"
       })     
     }
    
     ... // create user
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-04
      • 2018-10-10
      • 2021-03-17
      • 2021-04-14
      • 2016-08-18
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多