我正在尝试使用Mongoose在MongoDB插入一个对象,但没有成功。 在'./models/user,js'我有:
var mongoDatabase = require('./db'); //I've connected to localhost here var database = mongoDatabase.getDb(); var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ user: String, adress: String, }); userSchema.methods.testmethod = function(){ console.log('test'); } userSchema.methods.insert = function (obj) { //this works but what is the point to use Mongoose If I do it that way database.collection("users").insertOne(obj, function(err, res) { if(err) throw err; console.log("1 record inserted"); }); } var User = mongoose.model('User', userSchema); module.exports = User;在'./controllers/user.js'
var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.post("/", function(request, response) { var obj = new User({ user: request.body.name, adress: request.body.adress, }); obj.testmethod(); //works fine obj.insert(obj); //throws an error User.insertOne(obj, function(err, res) { //error: insertOne is not a function if(err) throw err; console.log("1 record inserted"); }); }); module.exports = router;我尝试过几种方法,但没有结果。 有人能帮我吗?
I'm trying to insert an object in MongoDB with Mongoose, but without success. In './models/user,js' I have:
var mongoDatabase = require('./db'); //I've connected to localhost here var database = mongoDatabase.getDb(); var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ user: String, adress: String, }); userSchema.methods.testmethod = function(){ console.log('test'); } userSchema.methods.insert = function (obj) { //this works but what is the point to use Mongoose If I do it that way database.collection("users").insertOne(obj, function(err, res) { if(err) throw err; console.log("1 record inserted"); }); } var User = mongoose.model('User', userSchema); module.exports = User;In './controllers/user.js'
var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.post("/", function(request, response) { var obj = new User({ user: request.body.name, adress: request.body.adress, }); obj.testmethod(); //works fine obj.insert(obj); //throws an error User.insertOne(obj, function(err, res) { //error: insertOne is not a function if(err) throw err; console.log("1 record inserted"); }); }); module.exports = router;I have tried few more ways to do it, but without result. Can someone help me?
最满意答案
你不应该使用'。/ db'中创建的任何mongodb对象来完成这项工作,mongoose会为你处理它。 尝试简化到这个:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ user: String, adress: String, }); module.exports = mongoose.model('User', userSchema);然后在您的控制器代码中
var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.post("/", function(request, response, next) { var user = new User({ user: request.body.name, adress: request.body.adress, }); user.save(function(err, u) { if (err) return next(err); return res.json(u); }); }); module.exports = router;在应用启动代码中的某个位置(通常在app.js或类似位置),您通常需要在设置路由之前调用mongoose.connect(<connection url>) 。
注意你也可以显式调用insert() ,但它是模型对象的静态方法,如下所示:
User.insert({user: 'bob', address: 'somewhere, nh'}, cb)
You shouldn't be using whatever mongodb object you're creating in './db' to do this work, mongoose takes care of it for you. Try simplifying down to this:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ user: String, adress: String, }); module.exports = mongoose.model('User', userSchema);Then in your controller code
var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.post("/", function(request, response, next) { var user = new User({ user: request.body.name, adress: request.body.adress, }); user.save(function(err, u) { if (err) return next(err); return res.json(u); }); }); module.exports = router;Somewhere in your app startup code (often in app.js or similar location) you'll want to call mongoose.connect(<connection url>), normally prior to setting up routes.
Note you can also call insert() explicitly, but it's a static method on the model object, like so:
User.insert({user: 'bob', address: 'somewhere, nh'}, cb)
更多推荐
发布评论