如何在Angular/Node.js/Express中将客户端参数传递给服务器端
How to pass client-side parameters to the server-side in Angular/Node.js/Express
可能是一个非常基本的问题,但我似乎找不到简单的答案。
我有一个 GET 方法利用 Angular 的 $http
请求特定 url (URL_OF_INTEREST
) 的承诺。
在此服务器上,我 运行 一个可以处理 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 客户端应用程序理想地传递字段数量、货币、来源和描述。
如何实现,我的 express 应用程序如何读取这些数据?
您需要在 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);
}
});
});
你可以用你的参数创建一个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)
});
编辑:或者如果您不想使用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;
答案与好的解决方案
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
});
快乐的帮助!
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'});
}
可能是一个非常基本的问题,但我似乎找不到简单的答案。
我有一个 GET 方法利用 Angular 的 $http
请求特定 url (URL_OF_INTEREST
) 的承诺。
在此服务器上,我 运行 一个可以处理 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 客户端应用程序理想地传递字段数量、货币、来源和描述。
如何实现,我的 express 应用程序如何读取这些数据?
您需要在 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);
}
});
});
你可以用你的参数创建一个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)
});
编辑:或者如果您不想使用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;
答案与好的解决方案
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
});
快乐的帮助!
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'});
}