javascript - postman 类型错误 用户不是函数

标签 javascript node.js mongodb

我使用 Nodejs 和 mongodb 练习开发网站,但遇到了问题。我的server.js代码如下:

var express=require('express');
var morgan=require('morgan');
var mongoose=require('mongoose');
var bodyParser=require('body-parser');

var User=require('./models/user');

var app=express();

mongoose.connect('mongodb://root:abc123@ds021172.mlab.com:21172/test', function(err){
  if(err){
    console.log(err);
  } else{
    console.log("Connected to the database");
  }
});


//Middleware
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true}));



app.post('/create-user', function(req, res, next){
  var user=new User();

  user.profile.name=req.body.name;
  user.password=req.body.password;
  user.email=req.body.email;


  user.save(function(err){
    if(err) return next(err);

    res.json('Successfully created a new user');
  });
});





app.listen(3000, function(err){
  if(err) throw err;
  console.log("Server is running on port 3000");
});

我的 user.js 代码如下:

var mongoose=require('mongoose');
var bcrypt=require('bcrypt-nodejs');
var Schema=mongoose.Schema;


/* The user schema attribution / chatacteristics / field */

var UserSchema = new mongoose.Schema({
  email: {type: String, unique: true, lowercase: true},
  password: String,
  profile: {
    name: {type: String, default: ''},
    picture: {type: String, default: ''}
  },

  address: String,
  history: [{
    date: Date,
    paid: {type: Number, default: 0},
    //item{type: Schema.Types.ObjectId, ref: ''}
  }]

});


/* Hash the password before we even save it to the datebase  */

UserSchema.pre('save', function(next){
  var user=this;
  if(!user.isModified('password')) return next();
  bcrypt.genSalt(10, function(err, salt){
    if(err) return next(err);
    bcrypt.hash(user.password, salt, null, function(err, hash){
      if(err) return next(err);

      user.password=hash;
      next();

    });
  });


});



/* compare password in the database and the one that the user type in */
UserSchema.methods.comparePassword=function(password){
  return bycrypt.compareSync(password, this.password);
}


module.exports=mongoose.model('User', UserSchema);

但是当我使用 postman 尝试发布如下数据时:

enter image description here

我输入三个参数,姓名、密码、电子邮件并单击发布按钮,但出现错误:

TypeError: User is not a function
<br> &nbsp; &nbsp;at /Users/chengyuanying/ecommerce/server.js:27:12
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/layer.js:95:5)
<br> &nbsp; &nbsp;at next (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/route.js:131:13)
<br> &nbsp; &nbsp;at Route.dispatch (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/route.js:112:3)
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/layer.js:95:5)
<br> &nbsp; &nbsp;at /Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:277:22
<br> &nbsp; &nbsp;at Function.process_params (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:330:12)
<br> &nbsp; &nbsp;at next (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:271:10)
<br> &nbsp; &nbsp;at urlencodedParser (/Users/chengyuanying/ecommerce/node_modules/body-parser/lib/types/urlencoded.js:95:37)
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/layer.js:95:5)
<br> &nbsp; &nbsp;at trim_prefix (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:312:13)
<br> &nbsp; &nbsp;at /Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:280:7
<br> &nbsp; &nbsp;at Function.process_params (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:330:12)
<br> &nbsp; &nbsp;at next (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/index.js:271:10)
<br> &nbsp; &nbsp;at jsonParser (/Users/chengyuanying/ecommerce/node_modules/body-parser/lib/types/json.js:107:37)
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/chengyuanying/ecommerce/node_modules/express/lib/router/layer.js:95:5)

你能帮我解决这个问题吗?

最佳答案

我改变了这一行:

var UserSchema = new Schema({

在 user.js 文件中,因此,它解决了问题。但不知道为什么

关于javascript - postman 类型错误 用户不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37173498/

相关文章:

javascript - 未捕获的类型错误 : Cannot read property '0' of null

javascript - 何时使用 node.js vs sinatra vs rails?

javascript - 如何制作超过 5 个输入的松弛对话? Node 松弛API

arrays - 排序或非整数数组的复杂性

mongodb - 按组连接字符串

javascript - 为什么 `exp && "t"|| "f"` 比 inline-if-else 慢很多?

javascript - 在 Javascript 中使用 prams 链接 Promise

javascript - 将 Webshim polyfill 与 ReactJS 一起使用是否安全

javascript - 继承时原型(prototype)方法中的“this”未按预期解析

ruby-on-rails - rails g mongoid :config not working Rails 6. 1