Probably a very basic question, but I cannot seem to find a simple answer.
I have a GET method leveraging Angular's $http
that is requesting a promise from a particular url (URL_OF_INTEREST
).
On this server, I run an express script server.js
script that can handle GET requests.
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);
I can communicate with the URL_OF_INTEREST using an Angular GET method as follows:
$http.get('URL_OF_INTEREST')
.success(
function(success){
console.log(success)
})
.error(
function(error){
console.log(error)
});
However, the fields amount, currency, source and description need to be ideally passed on from the Angular client side application.
How can this be achieved and how can my express application read this data?
You need to pass the data in your get call as folow:
And in your backend, you can get your url parameters as folow:
You can create a JS object with your parameters, and then use jQuery's
$.param
(http://api.jquery.com/jquery.param/) to easily serialize them into a URL query string:And on your
$http
call:EDIT: OR if you don't want to use jQuery:
On server-side, just use the
req
object to get the parameters:Answer vs Good Solution
HTTP POST is preferred while sending data to the server.
HTTP GET method means querying for data, not sending data. Because of that, an HTTP request with GET method will always have request.body empty. But still data can be sent to server via GET using query string. In your case:
Client
Server
Happy Helping!
HTTP GET method
Client:
Server:
HTTP POST method
Client:
Server: