如何使用带有参数的url的angularjs 1.6的$ http.get()

时间:2017-05-18 14:19:00

标签: angularjs node.js

我使用nodejs和angularjs,但我不明白如何将nodejs中的数据转换为角度,我将把代码留在这里

App.js angular

Var myApp = angular.module ('angularTodo', ['angularUtils.directives.dirPagination']);


MyApp.controller ('mainController', ['$ scope', '$ http', function ($ scope, $ http) {

   $ Http.get ('/ api / all'). Then (function (res) {
       $ Scope.pacientes = res.data;

       $ Scope.sort = function (keyname) {
               $ Scope.sortKey = keyname; // set the sortKey to the param passed
               $ Scope.reverse =! $ Scope.reverse; // if true make it false and vice versa
           }
   }). Finally (function () {
       $ Scope.example7 + = "(Finally called)";
   });


}]);

MyApp.controller ('patient', ['$ scope', '$ http', function ($ scope, $ http)

   $ Http.get ('/ patient /: id') .then (function (res) {
       $ Scope.new = res.data.pk;
       $ Scope.test = "test11";
   }). Finally (function () {
       $ Scope.example7 + = "(Finally called)";
   });


}]);

Routes.js

App.get ('/ patient /: id', function (req, res) {

Var id = req.params.id;

Connection.query ('SELECT * FROM patient WHERE pat_id =?', [Id], function (err, data)
        {

            If (err)
                Console.log ("Error Selecting:% s", err);

            Res.json (data [0]);
            Console.log (id);
            Console.log (data);

         });



});

App.get ('/ newinf /: id', isLoggedIn, function (req, res) {

     Res.render ('informe.ejs', {user: req.user});

});

问题是$ http.get(' / patient /:id')没有收到ID?如何在angularjs中获取网址的ID?

2 个答案:

答案 0 :(得分:0)

在工厂中,您可以定义一个发出http请求的函数。

MyApp.factory('test_factory',function($http,{
    factory = {};
    factory.get_request = function(params){
        return $http({
            method: 'GET',
            url: 'some_url',
            params: params
        })
    };
    return factory
});

在您的控制器中,您可以在工厂中定义http请求(确保DI出厂)。请注意我是如何将对象传递给工厂中的get_request函数的。

MyApp.controller('some_ctrl',function($scope,test_factory){
    test_factory.get_request({id:12345}).then(function(data){
        console.log(data)
    })
});

当然,您可以使用基本相同的语法直接从控制器发出http请求。但是,将请求逻辑分离到工厂通常会更好。

此外,由于您正在发出GET请求,因此查询参数将在发出请求时添加到url字符串中。您可以通过检查大多数浏览器开发人员工具中的网络选项卡来确认。

答案 1 :(得分:0)

您需要自己发送ID作为请求中网址的一部分。在有角度的情况下,您当前正在向/patient/:id发送请求。尝试使用数据库中患者的有效ID替换角度代码中的:id。例如:

$http.get('/patient/12')
    .then(function (res) {...})
然后,

12应显示为服务器端代码中的req.param.id

我还建议您遵循user2263572的建议,并将此逻辑封装到工厂中。