おそらく非常に基本的な質問ですが、簡単な答えを見つけることができないようです。
特定のURL($http
)からのプロミスを要求するAngularのURL_OF_INTEREST
を利用するGETメソッドがあります。
このサーバーで、GETリクエストを処理できる高速スクリプトserver.js
スクリプトを実行します。
server.js
var express = require('express'); // call express
var app = express(); // define our app using express
var bodyParser = require('body-parser');
var stripe = require("stripe")("CUSTOM_TEST_TOKEN");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 8080;
var router = express.Router(); // get an instance of the express Router
router.get('/', function(req, res, next) {
var stripeToken = "CUSTOM_PAYMENT_TOKEN";
var charge = stripe.charges.create({
amount: 1100, // amount in cents, again
currency: "usd",
source: stripeToken,
description: "Example charge"
}, function(err, charge) {
if (err && err.type === 'StripeCardError') {
res.json(err);
} else {
res.json(charge);
}
});
});
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
})
app.use('/api', router); // register our route
app.listen(port); // start our server
console.log('Magic happens on port ' + port);
次のようにAngular GETメソッドを使用して、URL_OF_INTERESTと通信できます。
$http.get('URL_OF_INTEREST')
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
ただし、金額、通貨、ソース、説明フィールドは、理想的にはAngularクライアント側アプリケーションから渡される必要があります。
どうすればこれを達成でき、私のエクスプレスアプリケーションはどのようにこのデータを読み取ることができますか?
次のように、get呼び出しでデータを渡す必要があります。
var data = {
amount: 3,
currency: 2,
source: 3,
description: 4
};
$http.get('URL_OF_INTEREST', data) // PASS THE DATA AS THE SECOND PARAMETER
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
そして、バックエンドでは、次のようにしてurlパラメータを取得できます。
router.get('/', function(req, res, next) {
var amount = req.query.amount; // GET THE AMOUNT FROM THE GET REQUEST
var stripeToken = "CUSTOM_PAYMENT_TOKEN";
var charge = stripe.charges.create({
amount: 1100, // amount in cents, again
currency: "usd",
source: stripeToken,
description: "Example charge"
}, function(err, charge) {
if (err && err.type === 'StripeCardError') {
res.json(err);
} else {
res.json(charge);
}
});
});
HTTP [〜#〜] get [〜#〜]メソッド
クライアント:
$http.get('/login', {params: {name: 'ABCXYZ'}})
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
サーバー:
router.get('/login', function(req, res, next) {
var username = req.query.name;
res.json({'status': 200, 'msg': 'success'});
}
HTTP [〜#〜] post [〜#〜]メソッド
クライアント:
$http.post('/login', {params: {name: 'ABCXYZ'}})
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
サーバー:
router.post('/login', function(req, res, next) {
var username = req.body.params.name;
res.json({'status': 200, 'msg': 'success'});
}
回答vs良い解決策
サーバーにデータを送信するときは、HTTP [〜#〜] post [〜#〜]が推奨されます。
HTTP GETメソッドは、データを送信するのではなく、データを照会することを意味します。そのため、[〜#〜] get [〜#〜]メソッドを使用したHTTPリクエストでは、常にrequest.bodyが空になります。ただし、データはクエリ文字列を使用してGET経由でサーバーに送信できます。あなたの場合:
クライアント
$http.get('url_to_be_hit', { name : 'Mr. X'})
.success(function(res){ //response })
.error(function(err){ //failure });
サーバー
app.get('/url_to_be_hit', function(req,res,next){
//req.query.name
});
どうぞよろしくお願いいたします。
パラメータを使用してJSオブジェクトを作成し、jQueryの$.param
( http://api.jquery.com/jquery.param/ )を使用して、URLクエリに簡単にシリアル化できます。ストリング:
var parameters = {
amount: 123,
description: 'test'
};
そして$http
の呼び出しで:
$http.get('URL_OF_INTEREST'+'?'+$.param(parameters))
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
[〜#〜] edit [〜#〜]:OR jQueryを使用しない場合:
$http.get('URL_OF_INTEREST', { params: parameters })
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
サーバー側では、req
オブジェクトを使用してパラメーターを取得します。
var amount = req.query.amount;
var description = req.query.description;