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

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() 语句放到前面并且需要确保数据库连接成功后再进行数据库操作。

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

    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)