如何在angularJS中传递查询字符串参数以及如何在节点服务器上接收它?

时间:2016-02-13 07:54:20

标签: angularjs node.js

我正在通过我的服务拨打api电话,如下:

$http.get('/api/subCategories/'+parent).success(function(response){
        $scope.subCategories = response;
});

我想将变量parent用作查询字符串。 我怀疑这不是传递查询字符串的正确方法。它应该是'/api/categories?parent='+parent之类的东西。我不确定。

然后,我如何在app.js中接收此查询字符串(即在服务器上)。

1 个答案:

答案 0 :(得分:2)

您的初始示例不是查询字符串,这是对的。 query string始终以?为前缀,如第二个示例所示。至于在服务器上接收它的价值,我不确定你是否只想知道如何解析它,或者你是否想知道如何设置整个服务器。如果您只想解析Node中的查询字符串,可以使用内置的urlquerystring模块,如下所示:

const url = require('url');
const querystring = require('querystring');

let mockUrl = 'http://localhost:8080/api/categories?parent=babar';

let query = url.parse(mockUrl).query; // => 'parent=babar'
let data = querystring.parse(query); // => { parent: 'babar' }

console.log(data.parent); // => 'babar'

如果您想知道如何设置将使用查询字符串处理请求的最小服务器,我建议使用express而不是Node的内置功能。与body-parser结合使用,您甚至不必担心解析位:

'use strict';

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// Configure server to parse JSON for us
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

// Handle request to our route
app.get('/api/categories', (req, res) => {
  // Do something with the value of the query property:
  console.log(req.query.parent);
});

// Start the server at http://localhost:8080
app.listen(8080);

有关详细介绍的详细信息,您可能会发现blog post有用: