Mongoose,MongoDb,Node。 Mongoose对象没有注册find()

时间:2015-07-06 02:29:46

标签: node.js mongodb mongoose

当我到达我的路线并要求从我的mongoDB获取用户时,它表示没有定义User.find()。提前抱歉,如果我使用不正确的术语,我会先跳入脸。

我假设我的路由在某处错误地完成了或者我没有在某个地方包含一个文件我希望你能帮我确定我是否在我的结构中错误地存储文件,在以下位置调用文件错误的时间,还是没有正确初始化变量?感谢您的帮助。

我是否需要额外的插件才能读取和写入数据库?

我一直收到以下错误:usercontroller.js:20

Error: <!DOCTYPE html><html><head><title></title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>undefined is not a function</h1><h2></h2><pre>TypeError: undefined is not a function
    at getUsers (c:\Users\Ravenous\kitchen\routes\user_api.js:5:10)
    at c:\Users\Ravenous\kitchen\routes\user_api.js:26:3

文件结构以防万一

-bin
-node_modules-\
    -user-app-\
        -user.js           //this is the model written with mongoose schema
-public-\
    -html
    -images
    -javascripts-\
        -userController
        -userService       //AngularJS factory
    -stylesheets
    -index.html
-routes-\
    -user_api.js           //with other useful routes inside.
-views                     //has some jade view engines that came with express-generator
-app.js
-package.JSON

我有这个用户模型 - 文件:node_modules / user-app / user.js

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var UserSchema = new Schema({
    user_name: String,
    password: String,
    email: String,
    location: String,
    date_created : {type: Date, default: Date.now}
});

var User = mongoose.model('User', UserSchema);

module.exports= {User:User};

然后我将user.js文件导入./routes/user_api.js文件,看起来像这样

user_api.js:

var User = require('./node_modules/user-app/user');


function getUsers(res){
        User.find().populate('users').exec(function(err, users){

            // if there is an error retrieving, send the error. nothing after res.send(err) will execute
            if (err){
                res.send(err)
            }else{
                console.log(users[0][0].name)
                res.json(users); // return all users in JSON format 
                db.close();
            }       
        })
};


module.exports = function(app) {

    // api -----------------------------------------------------------
    // get all users
    app.get('/node_modules/user-app/user', function(req, res) {

        // use mongoose to get all users in the database
        getUsers(res);
    });

    // create user and send back all users after creation
    app.post('/node_modules/user-app/user', function(req, res) {

        // create a user, information comes from AJAX request from Angular
        User.create({
            user_name: User.user_name,
            password: User.password,
            email: User.email,
            location: User.location,
            done : false
        }, function(err, todo) {
            if (err){
                res.send(err);
            }else{
                // get and return all the users after creating one
                getUsers(res);
            }
        });

    });

    // delete a user
    app.delete('/node_modules/user-app/user:user_id', function(req, res) {
        User.remove({
            _id : req.params.user_id
        }, function(err, user) {
            if (err)
                res.send(err);

            getUsers(res);
        });
    });
};

我正在添加此user_api路由并将方法添加到app.js文件中,如此

// loading some required modules above this

var app = express();

var user = require('./routes/user_api')(app);

处理Angular和Node连接以及状态共享我正在使用以下

userController.js:

(function(){
'use strict'
var userCtrl = angular.module("userController",[]);
console.log('userController init')

userCtrl.controller('UserController', ['$scope','$http','Users',function($scope,$http,Users){
    $scope.users = {};
    $scope.loading = true;


console.log ("user init");
    Users.get()
        .success(function(data){
            $scope.users = data;
            $scope.loading = false;
            console.log(data)
        })

        .error(function(err){
            console.log('Error: ' + err);
        });
    $scope.createUser = function(){
        if($scope.users.user_name != false){
            console.log($scope.users.user_name)
            $scope.loading = true;

            Users.create($scope.users)

                .success(function(data){
                    $scope.loading=false;
                    $scope.users = data;
                    console.log(data);
                })
                .error(function(err){
                    console.log('Error: ' + err);
                });
        }
    };
}]);

})();

1 个答案:

答案 0 :(得分:2)

将您需要用户的行更改为

var User = require('./node_modules/user-app/user').User;

这是因为在定义用户的导出语句中,您有以下行:

module.exports = {User:User};

因此,您正在导出一个具有User属性的对象。