You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Express.js在MongoDB中存储布尔值:注册时isAdmin始终为false的解决方法

问题:MongoDB中isAdmin字段始终无法设置为true

我尝试在MongoDB中存储布尔值,但isAdmin字段始终为false。

数据库Schema

const UserSchema = new Schema({
  name: String,
  password: {
    type: String,
    required: true
  },
  isAdmin: {
    type: Boolean,
    default: false
  },
});

Postman发送的请求

{ 
    "name": "aj",
    "password":"aj",
    "isAdmin": true
}

数据库存储结果

{
  "isAdmin": false,
  "name": "aj",
  "password": "$2a$10$wBfElJ3YbZoOk3Bz/tyFc.uzZGuzStDppDCINZ8mZexZKumnDMmoW"
}

POST请求路由代码

router.post("/auth/signup", async (req, res) => {
  console.log(res);
  if (!req.body.email || !req.body.password) {
    res.json({
      success: false,
      message: "Please enter your email and password"
    });
  } else {
    try {
      let newUser = new User();
      newUser.name = req.body.name;
      newUser.email = req.body.email;
      newUser.password = req.body.password;

      await newUser.save();
      let token = jwt.sign(newUser.toJSON(), process.env.SECRET, {
        expiresIn: 604800 //1 WEEK
      });

      res.json({
        success: true,
        token: token,
        message: "Successfully created"
      });
    } catch (err) {
      console.log(err)
      res.status(500).json({
        success: false,
        message: err.message
      });
    }
  }
});

请问如何在注册时将isAdmin设置为true或false?


解决方案

问题核心是你没有将请求中的isAdmin值赋值给新建的User实例,Schema里isAdmin默认值为false,所以未赋值时会一直使用默认值。

修改步骤:

在路由代码中添加一行,将请求体里的isAdmin赋值给User实例:

router.post("/auth/signup", async (req, res) => {
  console.log(res);
  // 注意:当前请求未传入email,但代码里校验了email,会导致请求失败,需调整:要么请求加email字段,要么移除email校验
  if (!req.body.email || !req.body.password) {
    res.json({
      success: false,
      message: "Please enter your email and password"
    });
  } else {
    try {
      let newUser = new User();
      newUser.name = req.body.name;
      newUser.email = req.body.email;
      newUser.password = req.body.password;
      // 新增这行,赋值isAdmin字段
      newUser.isAdmin = req.body.isAdmin;

      await newUser.save();
      let token = jwt.sign(newUser.toJSON(), process.env.SECRET, {
        expiresIn: 604800 //1 WEEK
      });

      res.json({
        success: true,
        token: token,
        message: "Successfully created"
      });
    } catch (err) {
      console.log(err)
      res.status(500).json({
        success: false,
        message: err.message
      });
    }
  }
});

额外提示:

你的Schema里并没有定义email字段,但路由代码里校验了req.body.email,同时请求中也没传email,这会导致请求直接返回失败。需要二选一:

  1. 在Postman请求中添加email字段;
  2. 移除路由里的!req.body.email校验逻辑(如果业务不需要email字段的话)。

内容的提问来源于stack exchange,提问作者xander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:42:03