Запрос $http GET в Node/Angular получает странный ответ

Когда я вызываю запрос на получение, я получаю ошибку ngRepeat: Dupes, потому что мой запрос на получение получает меня из console.log, показывает мне жестко закодированный html-код с самой страницы.

Вот консоль.лог

mainController.js:10 <!DOCTYPE>
<html ng-app="myApp">
<head>
    <title>Social Network Tutorial</title>
    <link rel="stylesheet" href="libs/bootstrap/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="libs/bootstrap/css/bootstrap-theme.min.css"/>
    <link rel="stylesheet" href="css/stylesheet.css"/>
</head>
<body>
    <nav class="navbar navbar-default navbar-fixed-top" ng-controller="navigationController">
        <div class="container">
            <div ng-show="!loggedIn">
                <input type="text" ng-model="login.email">
                <input type="password" ng-model="login.password">
                <button ng-click="logUserIn()">Login</button>
                <a ui-sref="signUp">Create An Account</a>
            </div>
            <div ng-show="loggedIn">
                <a ui-sref="editProfile">Edit Profile</a>
                <a ng-click="logOut()">Logout</a>
            </div>
        </div>
    </nav>

    <div ui-view></div>

    <!--Libraries-->
    <script type="text/javascript" src="libs/angular/angular.min.js"></script>
    <script type="text/javascript" src="libs/angular-ui-router/angular-ui-router.min.js"></script>
    <script type="text/javascript" src="libs/ng-file-upload/ng-file-upload.min.js"></script>
    <script type="text/javascript" src="app.js"></script>

    <!--Controllers-->
    <script type="text/javascript" src="partials/signup/signupController.js"></script>
    <script type="text/javascript" src="partials/navigation/navigationController.js"></script>
    <script type="text/javascript" src="partials/profile/editProfileController.js"></script>
    <script type="text/javascript" src="partials/main/mainController.js"></script>
</body>
</html>

Мой клиентский контроллер показывает следующий код:

var getTweets = function(initial){
        $http.get('/tweets').then(function(response){
            if(initial){
                $scope.tweets = response.data;
            } else {
                $scope.incomingTweets = response.data;
            };
        });
    };
    getTweets(true);

и моя функция API на стороне сервера выглядит следующим образом:

router.get('/tweets', tweetController.getTweets);

наконец, контроллер на стороне сервера выглядит следующим образом:

module.exports.getTweets = function(req,res){
console.log("works");
Tweet.find({}).sort({date: -1}).exec(function(err, data){
    if(err) {
        throw err;
        res.json({status: 500});
    } else {
        console.log(data);
        res.json(data);
    };
});
};

Что я сделал не так?

В console.log на стороне сервера не отображается «работает», что означает, что запрос даже не достиг сервера, но по какой-то причине клиентская сторона получила ответ.


person Baneet Grover    schedule 13.04.2016    source источник
comment
mainController.js:10 а что с этим файлом и с той строкой? кажется, ваш ответ должен быть найден там   -  person Victor Perov    schedule 13.04.2016
comment
Привет @VictorPerov, именно здесь я вставил функцию console.log, чтобы увидеть, какой ответ я получаю от сервера.   -  person Baneet Grover    schedule 13.04.2016
comment
Итак, вы пытаетесь напечатать "works", но получаете html своей страницы? Это означает, что ваш веб-сервер может быть неправильно настроен. Но я не могу помочь вам, не разобравшись во всех моментах. Попробуйте изменить throw err в контроллере веб-сервера на console.log(err); для проверки.   -  person Victor Perov    schedule 13.04.2016
comment
Нет, @VictorPerov, я пытался выполнить console.log(response.data) на стороне клиента, но на самом деле он даже не доходит до сервера. Console.log(works) должен печатать Works на консоли моего сервера, но это не так, а console.log(response.data) печатает данные консоли выше.   -  person Baneet Grover    schedule 13.04.2016
comment
Вы уверены, что это module.exports.getTweets = function(req,res){ верно? В nodejs должен быть ваш tweetController, а не module. Или вы переименовали module?   -  person Victor Perov    schedule 14.04.2016
comment
Целевая страница по умолчанию (вероятно index.html) может отображаться в различных ситуациях.   -  person Victor Perov    schedule 14.04.2016


Ответы (1)


Вероятно, сервер вернул страницу с ошибкой. Проверьте возвращенный html, чтобы узнать, что происходит, возможно, он содержит некоторую информацию.

Отладьте свое приложение, выполнив URL-адрес /tweets в браузере или Postman (или используйте инструменты разработчика Chrome). Если сервер не возвращает json, либо URL-адрес неверен, либо что-то не так на стороне сервера. Это устраняет ошибку на стороне клиента.

person fikkatra    schedule 13.04.2016
comment
/tweets никуда не перенаправляется, поэтому ничего не показывает мне в браузере. Я лично перенаправил запрос /tweets get как на стороне клиента, так и на стороне сервера, но сервер так и не получил запрос. - person Baneet Grover; 13.04.2016
comment
Я имею в виду полный URL, конечно. Предполагая, что клиент и сервер работают на одном и том же порту, попробуйте выполнить localhost:[port]/tweets. - person fikkatra; 13.04.2016
comment
Я понял, что вы имели в виду, но в node.js /tweets никуда не перенаправляется. Так что, зайдя в /tweets, я в некотором смысле получу ошибку 404. - person Baneet Grover; 13.04.2016
comment
Если /tweets никуда не перенаправляется, как вы ожидаете получить какой-либо результат при вызове $http('/tweets')? Вы проверили возвращенный html? Я предполагаю, что это страница ошибки 404 - person fikkatra; 13.04.2016
comment
html, который он возвращает, относится к моей основной странице просмотра, если вы видите код выше, вы поймете, что я имею в виду. Он маршрутизируется на сервере, но не является фактической ссылкой. Он просто перенаправляется в функцию, которая обращается к базе данных. - person Baneet Grover; 13.04.2016
comment
У меня есть функции POST, выполненные таким же образом, которые работают отлично, но по какой-то причине функции GET возвращают ту же проблему. Имейте в виду, что это сервер node.js, а не php. - person Baneet Grover; 13.04.2016