新生代农民工官方认证码农小拽 2020-10-25 10:20 采纳率: 0%
浏览 101

express框架 后台路由 post报错500? 求教

// 上传头像路由
router.post('/uploadAvatar', (req, res) => {
  // 获取userid
  const userid = req.cookie.userid 
  if(!userid) {
    res.send({code: 1, msg: '登录已失效,请重新登录!'})
  } else {
    // 获取头像
    const {avatar} = req.body 
    // 通过userid查找
    UserModel.findByIdAndUpdate({_id: userid}, {avatar}, (err, oldUser) => {
      if(err) {
        res.clearCookie('userid') // 清除cookie
        res.send({code: 1, msg: '请重新登录!'})
      } else {
        // 从原有数据中拿到_id username
        const {_id, username} = oldUser
        // 把更新的头像数据 和原有数据合并
        const data = Object.assign({_id, username}, {avatar})
        // 给出响应
        res.send({code: 0, data})
      }
    })
  }
})

用postman测试的,报错500,不知道哪里有问题。 因为另一个项目,我也是用的这样的代码,是没问题的。 哪位大佬帮忙看看,感谢!

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 18:09
    关注

    参考GPT和自己的思路:

    根据您提供的代码和问题描述,可能出错的地方有几点:

    1. 请求中的 req.cookie.userid 可能为 undefined 或者 null。这时候需要检查客户端是否在发送请求时正确设置了 cookie,并且 cookie 名和值是否正确。
    2. UserModel.findByIdAndUpdate 更新数据库时可能出错。您可以用 console.log 来打印出 err 看看具体出错信息是什么。可能是数据库连接失败、查询条件不正确等。
    3. 如果更新数据库成功,但是从旧数据中获取 _idusername 出错,也会导致这个路由返回 500。检查一下更新数据库时是否成功更新了头像字段,并且从旧数据中能否有效地获取 _idusername

    还有几点需要注意:

    1. 路由中没有对上传头像这个 POST 请求的 Content-Type 进行限制,默认情况下 req.body 传递的是 buffer。您可以通过在调用 router.post() 之前加上 app.use(express.json())app.use(express.urlencoded({ extended: true })) 来设置 POST 请求的 Content-Type。
    2. 如果您在连接数据库时采用异步连接方式,就需要在路由外层把 mongoose.connect() 语句放到前面并且需要确保数据库连接成功后再进行数据库操作。

    希望我的回答能够对您有所帮助。

    评论

报告相同问题?