2016-10-23 3 views
0

をnodejsに特異的に結合するangularJS変数を失敗した...私はこれに関連する多くのトピックを見てきた、(より多くがあった)、ここですべてのものを試してみましたが、何も動作:は私nodejsサーバに私のangularJS POSTパラメータを送信する問題を抱えている

How to pass parameter in Angularjs $http.post

Angular: how to pass $scope variables into the Node.js server.

How to pass client-side parameters to the server-side in Angular/Node.js/Express

How to pass data from AngularJS frontend to Nodejs backend?

この問題でenvolvedさ

私の関連するコード、 ハンドル-テンプレート:

<div ng-controller='questions'> 
    <form method="POST" class="form-inline" class="my-search-menu"> 
    <button ng-click="search()" class="btn btn-default glyphicon glyphicon-search" type="submit" style="background-color: #85C1E9;"></button> 
    <input style="direction: rtl" type="text" name="search_text" ng-model="search_text" class="form-control" placeholder="Search" aria-describedby="sizing-addon3"> 
    </form> 
</div> 

AngularJS:

var myapp= angular.module('myapp', []); 

myapp.controller("questions", function($scope,$http) { 
$scope.search = function() { 
    var formdata = {search_text : $scope.search_text}; 
    $http.post('/search', {params: formdata}) 
     .success(function (data, status, headers, config) { 
      $scope.questions = data; 
     }) 
     .error(function(data, status, header, config){ 
      $scope.onerror = "Data: " + status; 
    }); 
    console.log(formdata); 
    }; 
}); 

NodeJS:

app.post('/search', function (req,res,next){ 
    var search_text = req.query.params.formdata.search_text; 
    console.log(req); 
    Question.find({$text: {$search: search_text}}).exec(function (err, questions){ 
    res.json(questions); 
    }); 
}); 
+0

何をしたいのですか?エラーは何ですか? – Sajeetharan

+0

REST APIからjson形式のデータを取得したい...というエラーは、ノードサーバーに渡すangularJS変数が定義されていないということです。サーバーセクションの – GevAlter

答えて

1

あなたが不足しているいくつかのポイントがあります。あなたはrequest.bodyとしてデータを受信するサーバ側で非常に最初のanguarコントローラ

$http.post('/search', {params: formdata}) 

で..ノードサーバにリクエストボディとして{params:formdata}を送信します。この場合には、本体を受信するための正しい方法は...

app.post('/search', function (req,res,next){ 
     var search_text = req.body.params.search_text; 
     //TODO 
    }); 

あなたは、パラメータとしてデータを送信したい場合は、コントローラに

$http({ 
     method: 'POST', 
     url: '/search/'+paramData, 
     }).then(function successCallback(response) { 
     //TODO 
     }, function errorCallback(error) { 
     //TODO 
     }); 

そしてに...このように関数を書くになりますサーバー側...

app.post('/search/:searchText', function (req,res,next){ 
     var paramData = req.params.searchText; 
     //TODO 
    }); 
+0

には本当にルートに検索テキストを追加する必要がありますか?それはちょうど変数自体の代わりに文字列 "searchText"になるように見えます – GevAlter

+1

はい、セクションを追加する必要があります:searchText、ルートをどのように追加したか見てください:searchText。これはパラメータとして渡されることを意味します。フロントエンドから値のエイリアスをsearchTextとして取得します。 –

+0

誰が何をすべきか分かっていますか?私が何を変えたとしても、なぜ/どのように正しくそれをするのか分からないので、/ search /:searchTextというルートに投稿して最後の部分を除いて彼が提案したものを試してみました。文字列 "searchText" – GevAlter

関連する問題