如何在Angular / Node.js / Express中将客户端parameter passing给服务器端

可能是一个非常基本的问题,但我似乎无法find一个简单的答案。

我有一个GET方法利用Angular的$http请求来自特定url( URL_OF_INTEREST )的承诺。

在这个服务器上,我运行一个可以处理GET请求的express脚本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度数量,货币,来源和描述需要从Angular客户端应用程序理想的传递。

这怎么能实现,我的快速应用程序如何读取这些数据呢?

您需要将您的获取调用中的数据传递给以下用户:

 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'}); } 

答案与好的解决scheme

  • 发送数据到服务器时首选HTTP POST

  • HTTP GET方法是指查询数据,不发送数据。 因此,使用GET方法的HTTP请求将始终具有request.body为空。 但仍然可以通过GET使用查询string将数据发送到服务器。 在你的情况下:

客户

 $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 }); 

快乐帮助!

您可以使用您的参数创buildJS对象,然后使用jQuery的$.paramhttp://api.jquery.com/jquery.param/ )轻松将它们序列化为一个URL查询string:

 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) }); 

编辑或者,如果你不想使用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;