如何在Angular / Node.js / Express中将客户端参数传递给服务器端

时间:2015-10-13 16:53:02

标签: javascript angularjs node.js express angularjs-http

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

我有一个GET方法,利用Angular的$http请求来自特定网址(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客户端应用程序中理想地传递。

如何实现这一点以及我的快递应用程序如何读取此数据?

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

您需要在get call中传递数据,如下所示:

n

在你的后端,你可以获得你的网址参数:

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

答案 2 :(得分:3)

答案与良好解决方案

  • 向服务器发送数据时,首选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
}); 

快乐帮助!

答案 3 :(得分:1)

您可以使用参数创建JS对象,然后使用jQuery&#39; $.paramhttp://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;