我已经成功创建了一个将 JSON 数据发送到我的 AngularJS 应用程序的 api。后端从 Mongodb 读取数据(使用 Mongoose 包)。index 方法就像一个魅力(我使用 jsonp,因为我的测试环境是一台服务器,后端和前端运行在不同的端口上)
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 ViewController 看起来像这样:
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
}
]);
我已经阅读了很多关于“Cast to ObjectId failed for value ":id" at path "_id"" 问题的文章,但我不明白...我需要创建自己的 ID 以进行查找吗?在这种情况下,我必须引入一个 auto_increment 唯一的 ID-ing 模式,这不推荐用于 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);
我认为这里缺少一些东西......?