如何将 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 路由