【问题标题】:How to retrieve mongodb data from server (node.js) to my AngularJS Route如何将 mongodb 数据从服务器(node.js)检索到我的 AngularJS 路由
【发布时间】: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>

提前致谢

【问题讨论】:

    标签: angularjs node.js mongodb angular-ui-router


    【解决方案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。这是因为即使删除了链接,StackOverflow 用户仍然可以访问答案。
        猜你喜欢
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        • 2018-10-10
        • 2015-07-17
        • 1970-01-01
        • 2017-11-19
        • 2014-04-12
        • 1970-01-01
        相关资源
        最近更新 更多