我无法让我的 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 请求工作的主要内容,如果未能解决你的问题,请参考以下文章

角度 POST 请求不起作用但 GET 工作正常

node.js http.get 在向远程站点发出 5 次请求后挂起

Alamofire GET请求无法正常工作

CodeIgniter:无法加载请求的文件:

GET 请求不起作用,但 POST 请求正在用于数据库查询

从 Values.get 请求多个范围会导致:无法解析范围错误