2015-05-23 2 views
0

Недавно я начал изучать стек MEAN, и я столкнулся с проблемой. Я пытаюсь отправить запрос $ http.get с углового на мой локальный сервер, но тело запроса не определено. Что странно, так это то, что в моем посте это не определено. Я знаю, что проблема может быть органом-парсером, и я потратил пару часов, пытаясь понять это безрезультатно. Спасибо за вашу помощь!Почему мой объект запроса пуст?

Вот мой экспресс-код:

var express = require('express'); 
var mongoose= require('mongoose'); 
var bodyParser=require('body-parser'); 
var http=require('http'); 
var db=mongoose.connect('mongodb://localhost:27017/checkIt'); 



var server = express(); 
var Schema= mongoose.Schema; 



server.use(bodyParser.urlencoded({ 
    extended: true 
})); 

server.use(bodyParser.json()); 


server.use(express.static(__dirname)); 



var UserSchema = new Schema({ 
    username: String, 
    password: String 
}); 

var User=mongoose.model('User',UserSchema); 


server.post("/checkIt/users",function(req,res){ 

    var newUser = new User({ 
     username: req.body.username, 
     password: req.body.password 
    }); 

    newUser.save(function(err,doc){ 
     res.send("inserted"); 
    }); 

}); 

server.get("/checkIt/users",function(req,res){ 
    console.log(req.body); 
    var userToCheck= new User({ 
     username:req.body.username, 
     password:req.body.password 
    }); 

    User.findOne({username: userToCheck.username, password: userToCheck.password},function(err,obj){ 
     res.send(obj); 
    }); 

}); 
server.listen(3000); 

Вот мой LoginController, где у меня есть запрос получите:

angular.module('app') 
.controller('loginController',['$scope','$location', '$http',function($scope,$location,$http){ 


    $scope.checkIfUser = function(){ 
     var user={ 
      username:$scope.username, 
      password:$scope.password 
     }; 

     $http.get("http://localhost:3000/checkIt/users",user) 
      .success(function(response){ 
       if(response===""){ 
        console.log("User does not exist"); 
       } 
       else goToHome(); 
      }); 
    }; 

    var goToHome = function(){ 
     $location.path('/Home') 
    } 

}]); 

Наконец, я не знаю, поможет ли это или нет, но это фрагмент кода, где я делаю запрос $ http.post

$scope.signup = function(){ 
      createUser(); 
      console.log(user); 
      $http.post("http://localhost:3000/checkIt/users",user) 
      .success(function(response){ 
       console.log(response); 
      }); 
     }; 

ответ

1

Там не собирается быть телом для GET! Это как раз то, как жизнь. Нет тела для GET. Теперь решить проблему. Вы хотите использовать req.query со стороны сервера для доступа к значениям.

На угловой стороне вам нужно сделать небольшое изменение в код (отправка пароли в URLs это плохо):

$http.get('http://localhost:3000/checkIt/users', { 
    params: { username: $scope.username, password:$scope.password } 
}).success(... same as before); 
+0

Благодарим вас за ответ. Я закончил использование req.query для доступа к значениям, потому что параметры меня не задавали. Я немного прочитаю об этом, чтобы узнать, почему и не волнуйтесь, это для учебных целей, я не буду отправлять пароли в URL-адресах в будущем. Спасибо за помощь! –

+0

Вы правы «о req.query» - извините. 'req.params' для маршрутов параметров, таких как'/users /: userId'. 'req.params.userId' будет содержать идентификатор пользователя. Я исправлю свой ответ. –

0

Тело запроса неопределенно просто потому, что вы не можете пройти через Params a GET, вы, вероятно, захотите изменить название маршрута и вместо этого использовать запрос POST.

Кстати, может быть более чистым, чтобы переместить ваши запросы API в UserService и ввести его в контроллер, потому что в конечном итоге вам придется повторно использовать их где-то в другом месте.

Смежные вопросы