【问题标题】:Trying to add new user to database (MongoDB) getting this error尝试将新用户添加到数据库(MongoDB)收到此错误
【发布时间】:2020-03-27 20:56:19
【问题描述】:

我正在尝试使用 post 请求将用户保存到 MongoDB 数据库,但出现错误 TypeError: User is not a function。我想不出它有什么问题。输出显示错误出现在“ const user = new User(req.body);”行 postman outputnodejs output

是我的用户模式错了还是导出方法错了。

const User = require("../models/user");

exports.signup = (req, res) => {
  const user = new User(req.body);
  user.save((err, user) => {
    if (err) {
      return res.status(400).json({
        err: "NOT able to save user in DB"
      });
    }
    res.json({
      name: user.name,
      email: user.email,
      id: user._id
    });
  });
};

exports.signout = (req, res) => {
  res.json({
    message: "User signout"
  });
};


//user schema
var mongoose = require("mongoose");
const crypto = require('crypto');
const uuidv1 = require('uuid/v1');


var userSchema = new mongoose.Schema({
    name:{
        type:String,
        required:true,
        maxlenght:32,
        trim: true
    },
    lastname:{
        type: String,
        maxlenght:32,
        trim: true
    },
    email:{
        type: String,
        trim: true,
        required: true,
        unique:true
    },
    userinfo:{
        type:String,
        trim:true
    },
    encry_password:{
        type:String,
        required: true,
    },
    salt:String,
    role:{
        type:Number,
        default:0,
    },
    purchases :{
        type:Array,
        default:[]
    }

} ,{ timestamps: true } );

userSchema.virtual("password")
    .set(function(password){
        this._password = password;
        this.salt = uuidv1();
        this.encry_password = this.securePassword(password);
    })
    .get(function(){
        return this._password;
    })

userSchema.methods = {
        authenticate: function(plainpassword){
            return this.securePassword(plainpassword) === this.encry_password;
    },

    securePassword: function (plainpassword){
        if(!plainpassword) return "";
        try {
            return crypto.createHmac('sha256',this.salt)
            .update(plainpassword)
            .digest('hex');
        } catch (err) {
            return "";
        }
    }
};




module.export = mongoose.model("User",userSchema)

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    这是代码的问题。

    第 1 行:const user = new User(req.body);

    第 2 行:user.save((err, user) => {

    JS 现在对user 感到困惑,user 是一个常量变量,user 是保存操作的返回值。

    因此,要摆脱这种情况,请将保存操作的返回值重命名为 responseUserObj 之类的其他名称。因此,您上面的两行代码现在应该是

    const user = new User(req.body);
            user.save((err, responseUserObj) => {
    
    

    编码愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2019-05-06
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      相关资源
      最近更新 更多