【问题标题】:AngularJS - Interaction with mongodbAngularJS - 与 mongodb 的交互
【发布时间】:2014-06-19 19:13:25
【问题描述】:

我是 MEAN 堆栈的新手,目前我正在尝试创建一个基本的单页应用程序。

我正在尝试连接到 mongodb,然后列出控制器中某个集合中的值。

但是,当我寻找答案时,我遇到了这个答案 Using AngularJs and MongoDB/Mongoose

如果您不能在 angular 和 mongo 之间使用下面的代码,那么这让我感到困惑是什么意思?还是有其他使用它的临时步骤?

var mongoose = require('mongoose');
var db = mongoose.createConnection('mongodb://localhost:3000/database');
var orderSchema = new mongoose.Schema({
    routeFrom : String,
    routeTo : String,
    leaving: String
});
var Order = db.model('Order', orderSchema);
module.exports = Order;

编辑:我尝试使用它的情况是这样的:

极客.html

<div class="jumbotron text-center">
    <h1>Geek City</h1>

    <p>{{tagline}}</p>

    <ul>
        <li ng-repeat="value in dataValues">
            {{value.name}}
        </li>
    </ul>


</div>

极客控制器

angular.module('GeekCtrl', []).controller('GeekController', function($scope) {

    $scope.tagline = 'The square root of life is pi!';

    $scope.dataValues = function(){

        var mongo = require('../config/db.js');

        var collectionValues = mongo.myCollection.find();

        return collectionValues;
    };
});

【问题讨论】:

    标签: javascript node.js angularjs mongodb


    【解决方案1】:

    Mongoose 是一个节点模块,据我所知它没有前端组件,因此您不会直接在前端 js 代码中使用它。它只会在应用程序的服务器端为您提供帮助。如果您对 Node 比较陌生,那么这些东西可能会让人很困惑,因为它都是端到端的 javascript,有时不清楚哪些模块可以在服务器或前端工作,特别是因为有些模块可以两者兼得。

    Node、MongoDB、Express 和 Mongoose 都在服务器上。

    Angular 存在于浏览器中,不能直接使用任何服务器端组件。

    使用 MEAN 堆栈,您将构建一个节点应用程序,该应用程序使用 mongoose 与 mongodb 通信并通过 express 向您的前端公开一个 api。然后在您的 html/js 代码中,您将使用 angular 及其 $http 服务与服务器通信以获取和设置数据。

    scotch.io 上有一个很棒的教程可以引导您完成整个过程: http://scotch.io/bar-talk/setting-up-a-mean-stack-single-page-application

    【讨论】:

    • 嘿,我已经完成了教程,但是对如何从数据库中获取数据以及如何从控制器中设置 {{..}} 值感到困惑。
    【解决方案2】:

    您不能在 Angular 中要求 db.js 配置文件,因为它没有设置为在客户端使用。您所描述的是所谓的“同构”方法。

    我的意思是:mongo 是一个数据库系统(粗略地说)。要从数据库中获取数据,我们通常不信任客户端。所以我们有一些服务器端代码(PHP、Ruby、Node.js、Java,你有什么)授权客户端、处理和过滤数据并将其返回给客户端(在本例中为 Angular.js)。因此,您的 Mongoose 模型设置为由服务器端 javascript 和应用程序的该部分使用。该服务器端还应该向 Angular 提供数据,因此您可以从 Angular 连接到 Node.js,而不是直接连接到 Mongo。因此(通常)为您的 Angular 文件提供服务的同一台服务器也将提供从 mongo 读取的数据。

    如果您希望使用 Angular 获得无服务器数据,可以查看 Firebase.js。它是 angular-ready 的,它可以帮助你不要弄乱 Mongo、mongoose 和服务器端代码。

    您可以尝试混合方法,将诸如流星.js 或骨干网之类的东西设置为在客户端和服务器上都可以工作,或者查看this article 了解更多信息。

    或者为了它的价值,如果你想运行你自己的 Mongo,你可以用 --rest 启动 mongo,然后你就可以直接连接到 Angular 到 Mongo,在 @ 987654324@ 或类似名称,具体取决于您的设置。

    【讨论】:

    • 哦,现在更有意义了。所以,要运行我的应用程序,我需要运行 mongod 数据库,运行处理服务器端的 server.js,然后运行处理前端的 app.js。 app.js 这样与 server.js 通信以获取数据库信息?它是否正确? app.js 可以使用 $https 与 server.js 通信?
    • 没错。如果您有直接的资源并且授权层不多,则可以在前端使用 $resource 而不是 $http - 它执行所有 $http.get、.post、.put、.del 方法(例如,您定义一个 $resource,比如一个 Post。然后你告诉 $resource 提供者帖子在 /api/posts 服务器路径。然后在你的控制器中你只需创建一个新的 $post,然后是 $post.save() 或 $post .query({name: 'Something'}) 等。在服务器端,您可以使用 npmjs.org/package/restify-mongoose 之类的东西 - 这样它就可以使您的帖子在服务器端 RESTful。
    • 所以当页面被刷新或更改时。它将在 routes.js 中寻找一条路线。 routes.js 然后会将操作发送回前端?例如,如果在我的控制器中我有“ $http.get("localhost:8080/geek").success(function(result){" 这将尝试获取它,这将由我的 routes.js 处理?
    • 这与上面的问题有关,我可以让它读取数据库上的对象,但是现在前端已经收到了对象,带有“res.json(docs); "通过routes.js,我如何将它与角度一起使用,即
    • - 编辑非常感谢您的帮助
  • 是的,您基本上可以将它与 ng-repeat 一起使用。没那么简单。你有 angular.service('dataService', ....) 可以获取数据。你会有一个依赖于dataService的angular.controller('DataCtrl', ...),它会说像$scope.docs = dataService.query();这样的东西。然后在控制器的范围内,您将执行
  • {{$index}} - {{doc.name}}
  • 。但这只是简单的解释。尝试一次做一件事。然后当您遇到困难时,就特定问题提出有关 SO 的问题 - 我认为您现在提出的问题过于宽泛而无法简单回答。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签