我无法让我的 get 请求工作
Posted
技术标签:
【中文标题】我无法让我的 get 请求工作【英文标题】:I can't get my get request to work 【发布时间】:2018-01-15 06:59:09 【问题描述】:,我使用 angular 并且我是新手并使用它,因为我的项目要求我必须使用它,我试图从我的 mongodb 数据库中获取我的条目,我也在运行 expressjs服务器附上所有的代码,我可以请告诉我我的错误,我敢肯定有很多。
//factory
app.factory('whipmeet', ['$http', function($http)
return $http.get('http://mongodb://127.0.0.1:27017/finalwhipmeet')
.success(function(data)
return JSON.parse(data);
)
.error(function(err)
return err;
);
]);
//controller
app.controller('MainController', ['$scope', 'whipmeet', function($scope, whipmeet)
whipmeet.success(function(data)
$scope.meetinfo = data,
$scope.meetlikes = 23;
);
]);
//index.html(only view)
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular.min.js"></script>
</head>
<body ng-app="WhipMeetApp">
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<h1 id="test1"> teting </h1>
<div class="main" ng-controller="MainController">
<div class="container">
<div class="card" ng-repeat="meet in meets">
<meet-info info="likes"></meet-info>
</div>
</div>
</div>
<!-- modules -->
<script src="/javascripts/app.js"></script>
<!-- controllers -->
<script src="/javascripts/controllers/MainController.js"></script>
<!-- services -->
<script src="/javascripts/services/whipmeet.js"></script>
<!-- directives -->
<script src="/javascripts/directives/meetInfo.js"></script>
</body>
</html>
//schema im trying to pull
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var MeetSchema = new Schema (
name: String,
location: String,
car: String,
date: Date,
time: Number,
type: String,
stock: Boolean
);
module.exports = mongoose.model('Meet', MeetSchema);
//error i get in console
angular.js:9734 GET http://mongodb//127.0.0.1:27017/finalwhipmeet net::ERR_NAME_NOT_RESOLVED
请告诉我是否需要发布更多文件/代码以明确这一点,我真的很抱歉这可能格式不正确,但我是初学者,我正在尽力通过教程和codeacademy,我只需要能够显示我的数据以及如何以相同格式创建帖子。 非常感谢任何想提供帮助的人的帮助,请不要对菜鸟苛刻。
//meets.js route
var express = require('express');
var router = express.Router();
var Meet = require('../models/Meet.js');
/* GET /meets listing. */
router.get('/', function(req, res, next)
Meet.find(function (err, meets)
if (err) return next(err);
res.json(meets);
);
);
/* POST /meets */
router.post('/', function(req, res, next)
Meet.create(req.body, function (err, post)
if (err) return next(err);
res.json(post);
);
);
/* GET /meets/id */
router.get('/:id', function(req, res, next)
Meet.findById(req.params.id, function (err, post)
if (err) return next(err);
res.json(post);
);
);
/* PUT /meets/:id */
router.put('/:id', function(req, res, next)
Meet.findByIdAndUpdate(req.params.id, req.body, function (err, post)
if (err) return next(err);
res.json(post);
);
);
/* DELETE /meets/:id */
router.delete('/:id', function(req, res, next)
Meet.findByIdAndRemove(req.params.id, req.body, function (err, post)
if (err) return next(err);
res.json(post);
);
);
module.exports = router;
【问题讨论】:
这是错误的做法。你的 Angular 工厂应该调用你的快速路由,而后者又应该使用本地驱动程序或像 Mongoose 这样的包装器与 mongoDB 对话。 能否请您给我发送一个代码示例?我也有明确的要求,我现在要发布它们 @TalhaAwan 能否请您发布一个应该如何完成的小示例?提前谢谢你 【参考方案1】:该示例使用回调成功和错误函数。你也可以使用 Promise。
Angular 工厂调用 express 路由,连接 mongoDB 进行创建、更新、删除或获取操作,并将响应发送回工厂。它将结果/错误传递给控制器。
app.controller('MainController', ['$scope', 'whipmeet', function($scope, whipmeet)
//get all
whipmeet.getWhipmeet(function(data)
$scope.meetinfo = data;
,
function(err)
console.log(err)
);
//get one
whipmeet.getWhipmeet("id::1234567", function(data)
,
function(err)
console.log(err)
);
//create
whipmeet.createWhipmeet(key: "some value", function(data)
,
function(err)
console.log(err)
);
]);
app.factory('whipmeet', ['$http', function($http)
return
createWhipmeet: function (obj, success, error)
$http.post('/meets/', obj, ).
then(function (data)
success(data)
, function (e)
error(e);
);
,
getWhipmeets: function (success, error)
$http.get('/meets/').
then(function (data)
success(data)
, function (e)
error(e);
);
,
getWhipmeet: function (id, success, error)
$http.get('/meets/'+id).
then(function (data)
success(data)
, function (e)
error(e);
);
]);
【讨论】:
谢谢 Talha Awan,这确实将数据输出到 /meets 路由中,我怎样才能将它发送到我的范围内,以便我可以在视图上显示数据? 在您的路线中,您已经在使用res.json(post);
。这会将数据返回给工厂方法,工厂方法也将其传递给控制器。所以在function(data)
控制器上你应该有返回的数据
谢谢,所以我不应该只显示它,而是将它放在一个变量中以便我可以部分显示它?
抱歉,我没听懂。 $scope.meetinfo = data;
将返回的数据分配给范围变量。它应该显示在您想要的任何地方。您可以console.log(data)
查看返回的内容以进行验证。
如果您认为我的回答有帮助,请考虑接受。谢谢:)以上是关于我无法让我的 get 请求工作的主要内容,如果未能解决你的问题,请参考以下文章