如何从服务器(node.js)检索MongoDB数据到我的AngularJS路由
这是我的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>
提前致谢
而不是写下面的代码
if(!err){ console.log(users); } else{ res.render('/details',{users:docs}) }
这样做
if(!err){ res.send(users); } else{ res.send('could not retrived data'); }
在控制器端你可以得到你所有的数据成功callback函数。这里也检查
app.listen(9000); console.log("Server Running on port 3000");
这应该像下面。
app.listen(9000); console.log("Server Running on port 9000");
控制器来获取请求的数据
.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); } }); });
如果你想检索你的数据,你必须停止这个:
res.render( '/细节',{用户:文档})
如果你想用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 }) }
记得要处理你的承诺的不可思议的情况
尝试使用angular度http模块来获取从客户端获取mongodb数据的节点/快速响应; 像这样: https : //github.com/J-Alex/api_rest_mvc