2016-04-23 20 views
1

mongodbデータベースにフォームデータを保存しようとしています。 .Findメソッドを使用しようとすると、ユーザーコレクションからデータが返されます。しかし、データを保存しようとするとエラーメッセージが表示されます。 .Saveメソッドも同じスキーマで動作するはずですが、これは私のコードです:保存機能がexpressjs mongooseで動作しません

var express= require('express'); 
var mongoose = require('mongoose'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 
var cookieParser = require('cookie-parser');  
var app= express(); 
/* set view folder and view engine */ 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs');  
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(cookieParser());  
/* database connection */ 
mongoose.connect('mongodb://localhost:27017/expresstest', function (err) { 
    if (err) { 
     console.log(err); 
    } 
}); 

/* define user schema */ 
var Schema = mongoose.Schema; 
var UserSchema = new Schema({name:String, password: String, phone: String, created: Date}); 
var User= mongoose.model('users',UserSchema); 
/* open new user form */ 
app.get('/user', function(req, res){ 
    res.render('user'); 
}); 

/* save user */ 
app.post('/user', function(req, res){ 
    User.save({ 
     name: req.body.name, 
     password: req.body.password, 
     phone: req.body.phone 
    }, function(error, docs) { 
     res.redirect('/') 
    }); 
});  
app.listen(3000, function(){ 
    console.log('express app is running on port 3000.'); 
}); 
+0

の続きを読みますか? – JohnnyHK

+0

TypeError:オブジェクト関数モデル(doc、fields、skipId){ if(!(this instanceof model)){ 新しいモデル(doc、fields、skipId)を返します。 } Model.call(this、doc、fields、skipId); }には、メソッド '保存'がありません。 (app/post/www/html/express/node_modules/express/lib/router/layer.js:95:5) at next(/var/www/html/express/node_modules/express/lib/router/route.js:131:13) ) at Route.dispatch(/var/www/html/express/node_modules/express/lib/router/route.js:112:3) –

+1

'save'を' create'に変更してみてください。 – JohnnyHK

答えて

4

あなたは関数を間違って呼び出しています。ここに関数の署名があります。 SaveはUserというオブジェクトで呼び出され、createはモデルUserで呼び出されます。次に例を示します。

var Tank = mongoose.model('Tank', yourSchema); 

var small = new Tank({ size: 'small' }); 
small.save(function (err) { 
    if (err) return handleError(err); 
    // saved! 
}); 

// or 

Tank.create({ size: 'small' }, function (err, small) { 
    if (err) return handleError(err); 
    // saved! 
}); 

エラーメッセージが含まれるようにあなたの質問を更新することができ、それについてhere

+0

'save'メソッドを使用してオブジェクトを既存の配列フィールドにプッシュするにはどうすればよいですか? – ashwinx

関連する問題