【问题标题】:Setting up relationships with mongoDB, node and angular.js与 mongoDB、node 和 angular.js 建立关系
【发布时间】:2015-11-19 00:44:23
【问题描述】:

我是 node 新手,来自 Ruby on Rails,我正在尝试像这样设置一个数据库: 用户有很多组和帖子。每个组属于一个用户。每个帖子都属于一个用户和一个或多个组。

为此,我认为最好使用embedded sub-documents 而不是references

我了解这应该如何工作的总体概念,但是,我很难将各个部分组合在一起。我很好奇我应该如何设置数据库,编写 api,然后设置控制器。我已经列出了我到目前为止所拥有的。任何能指引我正确方向的事情都会非常有帮助。

谢谢

用户数据模型

    // app/models/user.js
// load the things we need
var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');
var Schema = mongoose.Schema;


var Post     = require('./post');
var Group    = require('./groups');

// define the schema for our user model
var userSchema = mongoose.Schema({

    local            : {
        email        : String,
        password     : String,
        username     : String,  
        group        : {
            name: String, 
            created      : {type:Date, default: Date.now},
                 post: { url: String, 
                         highlighted: String, 
                         comment: String, 
                         image: String, 
                         group: String, 
                         timeStamp: String, 
                         description: String, 
                         title: String,
                         created: {type:Date, default: Date.now} 
                    } 
        },
        created: {type:Date, default: Date.now} 

    }

});

userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.local.password);
};

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

API

...
    router.route('/users')
            .post(function(req, res) {
                var user = new User();

                user.local.name     = req.body.name;
                user.local.email    = req.body.email;
                user.local.password = req.body.password;
                user.local.posts    = req.body.post;
                user.local.groups    = req.body.group;

                user.save(function(err) {
                    if (err) 
                       res.send(err);

                    res.json({ message: 'user created!' });
                });
            }) 
            .get(function(req, res) {
                User.find(function(err, users) {
                    if (err)
                        res.send(err);

                    res.json(users);
                });
            });
        router.route('/users/:user_id')

            // get the post with that id (accessed at GET http://localhost:8080/api/users/:user_id)
            .get(function(req, res) {
                User.findById(req.params.user_id, function(err, user) {
                    if (err)
                        res.send(err);
                    res.json(user);
                });
            })

            // update the user with this id (accessed at PUT http://localhost:8080/api/users/:user_id)
            .put(function(req, res) {

                // use our user model to find the user we want
                User.findById(req.params.user_id, function(err, user) {

                    if (err)
                        res.send(err);

                    user.name           = req.body.name;
                    user.local.email    = req.body.email;
                    user.local.password = req.body.password;
                    user.local.posts    = req.body.post;
                    user.local.groups    = req.body.group;

                    // save the user
                    user.save(function(err) {
                        if (err)
                            res.send(err);

                        res.json({ message: 'user updated!' });
                    });

                });
            })

            // delete the user with this id (accessed at DELETE http://localhost:8080/api/users/:user_id)
            .delete(function(req, res) {
                User.remove({
                    _id: req.params.user_id
                }, function(err, user) {
                    if (err)
                        res.send(err);

                    res.json({ message: 'Successfully deleted' });
                });
            });
...

控制器

$scope.addUser = function() {
        //$scope.user.url = parenturl;
        console.log($scope.user._id);

        $http.user('/api/users', $scope.user).success(function(response){
            refreshuser();
            //$scope.user = {url: parenturl}
        });

    };


    $scope.remove = function(id) {
        console.log(id);
        $http.delete('/api/users/' + id).success(function(response) {
            //refreshuser();
        });

        return false;
    };

    $scope.edit = function(id){
        console.log(id);
        $http.get('/api/users/' + id).success(function(response) {
            $scope.user = response;
        });
    };

    $scope.update = function() {
        console.log($scope.user.id);
        $http.put('/api/users/' + $scope.user._id, $scope.post).success(function(response) {
            refreshUser();
        });
    };    

【问题讨论】:

    标签: javascript angularjs node.js express mongoose


    【解决方案1】:

    我认为你做得很好。肯定比我开始时的情况要好得多。我不确定这里的问题是什么,但是如果您正在寻找 MEAN 路径上的其他资源,首先我建议使用 framework 它会减少一些开发时间。还有很多其他选择。

    我也有read this book,我发现它简短而甜美,切中要害。本书从零开始,最终在heroku 上实时部署应用程序。这本书的作者还管理着一个名为scotch.io 的网站,你会在那里找到一些关于任何 MEAN 堆栈的好教程。

    如果您想了解更多一般的 javascript,还有 egghead.io。他们在那里有免费和付费的教程。即使是免费的有时也很好。

    如果你想了解更多关于 mongo 的知识,一定要去mongo university 上课,他们是免费的,而且很棒。到目前为止,我已经参加了 4 节课,如果你通过了课程,你将获得结业证书。获得证书对我来说无疑是一种激励,这也可能对你有激励作用。

    如果您想了解有关 Angular 本身的更多信息,我强烈推荐 Dan Wahlin's udemy 上的课程。我从他那里拿走了两个,它们确实闪耀着光芒,让棱角分明对我来说更有意义。如果您不想支付全价,我建议您等几周直到美国的感恩节。在那段时间发生了很多在线交易。在交易期间,我以每门 10 美元或类似的价格参加了这些课程。

    我从事 PHP 开发已有 6 年多的时间了。在这一点上感谢 nodejs,我非常确定 JavaScript 是未来。那是我个人的看法,我提到它只是希望它能给你勇气,绝对不要引发讨论战。我希望我有所帮助。

    【讨论】:

    • 您好 ODelibalta,非常感谢您提供的信息。我实际上正在学习 Dan Wahlin 的 Angular 课程,以及 Anthony Alicea 的 nodejs 课程。请允许我澄清这个问题。我遇到的主要问题是数据库内的关系。我知道如何设置它,但是,我在发布到数据库时遇到问题,比如创建一个属于某个用户并属于特定组的帖子。我的主要问题是我不知道该代码是什么样的,而且我很难找到显示执行此操作的代码的完整示例。谢谢,
    • 我已经修改了我的问题,使其更清晰。可以在 [这里:] (stackoverflow.com/questions/33789845/…) 找到它
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 2018-02-15
    • 2017-11-18
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多