如何将 mongodb 数据从服务器(node.js)检索到我的 AngularJS 路由

Posted

技术标签:

【中文标题】如何将 mongodb 数据从服务器(node.js)检索到我的 AngularJS 路由【英文标题】:How to retrieve mongodb data from server (node.js) to my AngularJS Route 【发布时间】:2016-05-15 07:28:37 【问题描述】:

这是我的Server.js 文件(NodeJS):

var express = require('express');
var server= require('http');
var path= require("path");
var bodyParser = require('body-parser');
var mongoose = require('mongoose');

var app= express();

var staticDIR = path.resolve(__dirname, "./www");``
app.use(express.static(staticDIR));
app.use(bodyParser.json());
app.get("*", function (req, res) 
    var indexViewPath = path.resolve(__dirname, "./www/index.html");
    res.sendFile(indexViewPath);
);
var dbURI = 'mongodb://localhost:27017/mydatabase';
mongoose.connect(dbURI);
mongoose.connection.on('connected', function () 
    console.log('Mongoose connected to ' + dbURI);
);
mongoose.connection.on('error',function (err) 
    console.log('Mongoose connection error: ' + err);
);
mongoose.connection.on('disconnected', function () 
    console.log('Mongoose disconnected');
);
process.on('SIGINT', function() 
    mongoose.connection.close(function () 
        console.log('Mongoose disconnected through app termination');
        process.exit(0);
    );
);

var userSchema = new mongoose.Schema(
    name: String,
    password:String,
    email: type: String, unique:true,
    createdOn:  type: Date, default: Date.now 
    //modifiedOn: Date,
    //lastLogin: Date
);

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

var CompanySchema = new mongoose.Schema(
    CompanyName: String,
    password:String,
    email: type: String, unique:true,
    createdOn:  type: Date, default: Date.now 
    //modifiedOn: Date,
    //lastLogin: Date
);
mongoose.model( 'company', userSchema );
var company = mongoose.model('company');

User.find(, function(err, users) 
    if(!err)
        console.log(users);
    
);

company.find(, function(err, users) 
    if(!err)
        console.log(users);
    
);

app.post('/account', function(req, res)
    new company(
        CompanyName:req.body.Company,
        email:req.body.email,
        password:req.body.password
    ).save(function(err,doc)
            if(err)res.json(err);
            else res.send("succesfully inserted");
            console.log(res);

        );
);

这是我获取数据的中间件:

app.get('/details', function (req, res) 
    console.log('I received a GET request');
    company.find(, function(err, users) 
        if(!err)
            console.log(users);
        
        else
            res.render('/details',users:docs)
        
    );

);


app.listen(9000);
console.log("Server Running on port 3000");

这是我的 Controller.js (AngularJS) 文件:

   angular.module('myApp', ['ngMaterial','firebase','ui.router'])
        .controller('detailsCtrl', function($scope,myfirebaseAddress,$location,$timeout) 
            var ref = new Firebase(myfirebaseAddress);

        )

这是我要显示 mongoDb 保存数据的路线

 <ui-view>
        <div class="sub-header">
            <h3>Company Details</h3>
        </div>

    <ul>
       <li ng-repeat="users in user">
           user.email
       </li>
    </ul>
    </ui-view>

提前致谢

【问题讨论】:

【参考方案1】:

如果写在下面的代码

if(!err)
        console.log(users);
    
    else
        res.render('/details',users:docs)
    

这样做

if(!err)
            res.send(users);
        
        else
            res.send('could not retrived data');
        

在控制器端,您可以在成功回调函数中获取所有数据。这里也检查一下

app.listen(9000);
console.log("Server Running on port 3000");

这应该如下所示。

app.listen(9000);
console.log("Server Running on port 9000");

【讨论】:

在“/details”路由上没有收到任何响应 因为有像docs..itsusers这样的nou对象。再次检查你的代码。 我发现了我在 server.js 中使用 app.get 两次的问题,一次用于 'app.get('')' 静态路径,一次用于获取数据,但是当我删除带有静态路径的'app.get()'然后我在控制台上接收mongodb数据【参考方案2】:

控制器获取请求的数据

.controller('detailsCtrl', function($scope,$http) 

    $scope.users = [];

    $http.get('/details').then(function(d)
        
            console.log(d);
            $scope.users= d.data;
        ,function(err)
        
            console.log(err);            
    )

)

服务器路由

app.get('/details', function (req, res) 
    console.log('I received a GET request');
    company.find(, function(err, users) 
        if(!err)
           res.json(users);
        

    );

);

【讨论】:

【参考方案3】:

如果你想检索你的数据,你必须停止这个:

res.render('/details',users:docs)

如果您想使用 Angular 应用程序提供数据,您必须停止渲染视图并开始在响应中返回 json。

res.jsonp(users)

然后你必须调整你的控制器。 编写如下服务:

angular.module('yourApp')
.service('userService', function($http)
    return 
        getUsers: function(url) 
            return $http.get(url)
            
        
    )

这应该返回一个 http 承诺。 在您的控制器中,您可以这样处理这个承诺:

$scope.users = function()
        userService.getUsers('/users')
            .then(function(users)
                //You have your users object
            )
    

记得处理你的诺言不成功的情况

【讨论】:

【参考方案4】:

尝试使用 Angular http 模块获取从客户端的 mongodb 获取数据的节点/快速响应;像这样:https://github.com/J-Alex/api_rest_mvc

【讨论】:

该链接可能会回答问题,但请在答案中发布该链接中的相关代码 sn-ps。这是因为即使删除了链接,*** 用户仍然可以访问答案。

以上是关于如何将 mongodb 数据从服务器(node.js)检索到我的 AngularJS 路由的主要内容,如果未能解决你的问题,请参考以下文章

如何将 mongodb 数据从服务器(node.js)检索到我的 AngularJS 路由

如何将文档从我的 mongodb 数据库发送到 android 应用程序?

如何将数据从 Cassandra 导出到 mongodb?

将 mongodb 数据库从本地主机迁移到远程服务器

如何将数据从mongodb导入hive

React Native 如何将 AsyncStorage 数据发送到 MongoDB 数据库?