我已經成功創建了一個將JSON數據發送到我的AngularJS應用程序的api。後端從Mongodb中讀取數據(使用Mongoose包)。該指數方法的工作原理就像一個魅力(我使用JSONP作爲我的測試環境是一臺服務器,以在不同的端口上運行的後端&前端)AngularJS,ExpressJS和Mongoose
exports.index = function (req, res){
return ContactModel.find(function (err, contacts) {
if (!err) {
return res.jsonp(contacts);
} else {
return console.log(err);
}
});
}
的AngularJS部分看起來是這樣的:
$http({method: 'jsonp', url: 'http://host:1222/contacts?callback=JSON_CALLBACK'}).success(function(data, status, headers, config) {
$scope.contacts = data;
});
,稍後我可以高興地訪問這些數據(如{{contact.name}})
的問題是,當我嘗試查看結果只有一個,使用findById:
exports.findById = function (req, res) {
return ContactModel.findById(req.params.id, function (err, contact) {
if (!err) {
return res.jsonp(contact);
} else {
return console.log(err);
}
});
}
我AngularJS視圖控制器看起來就像這樣:
function ViewController($scope, $http) {
$http({method: 'jsonp', url: 'http://host:1222/contacts/:id?callback=JSON_CALLBACK'}).success(function(data, status, headers, config) {
console.log("Data: " +data);
$scope.contact = data;
});
}
而且它通過調用:
<a href="#/contacts/{{ contact._id }}">{{ contact.name }}</a>
但是,我一直收到的錯誤是:
{ message: 'Cast to ObjectId failed for value ":id" at path "_id"',
name: 'CastError',
type: 'ObjectId',
value: ':id',
path: '_id' }
下面是從數據庫中的樣本:
JSON_CALLBACK && JSON_CALLBACK([
{
"name": "Test User",
"_id": "51c5fde3ce36618e0c000003",
"__v": 0
}
]);
我已閱讀有關「演員到的ObjectId失敗值‘好幾篇文章:ID’的路徑‘_id’」的問題,但我不明白這一點...我是否需要爲查找創建自己的ID?在這種情況下,我必須引入一個auto_increment唯一標識模式,因此不建議在MongoDB中使用這種模式,因此,您能否告訴我該如何才能以正確的方式查詢數據?另外,如果你在AngularJS方面看到我當前實現的任何問題,請讓我知道(我是這個主題的新手)。
更新
這是我做的如何與AngularJS路由:
angular.module('contactmanager', ['filters']).
config(function($routeProvider) {
$routeProvider.
when('/', {controller:ListController, templateUrl:'list.html'}).
when('/contacts/:id', {controller:ViewController, templateUrl:'contact.html'}).
otherwise({redirectTo:'/'});
});
更新2
服務器端路由 - 表示:
var express = require("express");
var contacts = require("./contact");
var app = express();
app.get("/", contacts.index);
app.get('/contacts', contacts.index);
app.get('/contacts/:id', contacts.findById);
app.listen(1222);
我認爲這裏有一些東西是缺少的......?
我會更新上面的路由職。 – Tamas
啊實際上我是要求服務器端路由的快速應用 –
再次更新,雖然我敢打賭有一些缺失,因爲我沒有太多的路由通過快遞進行。 – Tamas