Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Express中获取URL参数?_Javascript_Node.js_Express_Url Parameters_Query Parameters - Fatal编程技术网

Javascript 如何在Express中获取URL参数?

Javascript 如何在Express中获取URL参数?,javascript,node.js,express,url-parameters,query-parameters,Javascript,Node.js,Express,Url Parameters,Query Parameters,我在从我的URL获取tagid的值时遇到了一个问题:localhost:8888/p?tagid=1234 请帮助我更正控制器代码。我无法获取tagid值 我的代码如下: app.js: var express = require('express'), http = require('http'), path = require('path'); var app = express(); var controller = require('./controller')({ app:

我在从我的URL获取
tagid
的值时遇到了一个问题:
localhost:8888/p?tagid=1234

请帮助我更正控制器代码。我无法获取
tagid

我的代码如下:

app.js

var express = require('express'),
  http = require('http'),
  path = require('path');
var app = express();
var controller = require('./controller')({
  app: app
});

// all environments
app.configure(function() {
  app.set('port', process.env.PORT || 8888);
  app.use(express.json());
  app.use(express.urlencoded());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
  app.set('view engine', 'jade');
  app.set('views', __dirname + '/views');
  app.use(app.router);
  app.get('/', function(req, res) {
    res.render('index');
  });
});
http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});
function controller(params) {
  var app = params.app;
  //var query_string = request.query.query_string;

  app.get('/p?tagId=/', function(request, response) {
    // userId is a parameter in the url request
    response.writeHead(200); // return 200 HTTP OK status
    response.end('You are looking for tagId' + request.route.query.tagId);
  });
}

module.exports = controller;
require('./controllers');
/*
 * GET home page.
 */

exports.index = function(req, res) {
  res.render('index', {
    title: 'Express'
  });
};
Controller/index.js

var express = require('express'),
  http = require('http'),
  path = require('path');
var app = express();
var controller = require('./controller')({
  app: app
});

// all environments
app.configure(function() {
  app.set('port', process.env.PORT || 8888);
  app.use(express.json());
  app.use(express.urlencoded());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
  app.set('view engine', 'jade');
  app.set('views', __dirname + '/views');
  app.use(app.router);
  app.get('/', function(req, res) {
    res.render('index');
  });
});
http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});
function controller(params) {
  var app = params.app;
  //var query_string = request.query.query_string;

  app.get('/p?tagId=/', function(request, response) {
    // userId is a parameter in the url request
    response.writeHead(200); // return 200 HTTP OK status
    response.end('You are looking for tagId' + request.route.query.tagId);
  });
}

module.exports = controller;
require('./controllers');
/*
 * GET home page.
 */

exports.index = function(req, res) {
  res.render('index', {
    title: 'Express'
  });
};
routes/index.js

var express = require('express'),
  http = require('http'),
  path = require('path');
var app = express();
var controller = require('./controller')({
  app: app
});

// all environments
app.configure(function() {
  app.set('port', process.env.PORT || 8888);
  app.use(express.json());
  app.use(express.urlencoded());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
  app.set('view engine', 'jade');
  app.set('views', __dirname + '/views');
  app.use(app.router);
  app.get('/', function(req, res) {
    res.render('index');
  });
});
http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});
function controller(params) {
  var app = params.app;
  //var query_string = request.query.query_string;

  app.get('/p?tagId=/', function(request, response) {
    // userId is a parameter in the url request
    response.writeHead(200); // return 200 HTTP OK status
    response.end('You are looking for tagId' + request.route.query.tagId);
  });
}

module.exports = controller;
require('./controllers');
/*
 * GET home page.
 */

exports.index = function(req, res) {
  res.render('index', {
    title: 'Express'
  });
};

Express 4.x

要获取URL参数的值,请使用

如果要获取查询参数
?tagId=5
,请使用


Express 3.x

URL参数

app.get('/p/:tagId', function(req, res) {
  res.send("tagId is set to " + req.param("tagId"));
});

// GET /p/5
// tagId is set to 5
app.get('/p', function(req, res) {
  res.send("tagId is set to " + req.query("tagId"));
});

// GET /p?tagId=5
// tagId is set to 5
查询参数

app.get('/p/:tagId', function(req, res) {
  res.send("tagId is set to " + req.param("tagId"));
});

// GET /p/5
// tagId is set to 5
app.get('/p', function(req, res) {
  res.send("tagId is set to " + req.query("tagId"));
});

// GET /p?tagId=5
// tagId is set to 5

您可以执行类似于
req.param('tagId')

的操作,如果您想获取URL中的查询参数值,请按照下面的代码片段进行操作

//url.localhost:8888/p?tagid=1234
req.query.tagid
OR
req.param.tagid

如果要使用Express param函数获取URL参数

Express param函数获取特定参数。这被认为是中间件,将在调用路由之前运行

这可用于验证或获取有关项目的重要信息

例如:

// parameter middleware that will run before the next routes
app.param('tagid', function(req, res, next, tagid) {

// check if the tagid exists
// do some validations
// add something to the tagid
var modified = tagid+ '123';

// save name to the request
req.tagid= modified;

next();
});

// http://localhost:8080/api/tags/98
app.get('/api/tags/:tagid', function(req, res) {
// the tagid was found and is available in req.tagid
res.send('New tag id ' + req.tagid+ '!');
});

如果您的路由如下所示,这将起作用:
localhost:8888/p?tagid=1234

var tagId = req.query.tagid;
console.log(tagId); // outputs: 1234
console.log(req.query.tagid); // outputs: 1234
var tagId = req.params.tagid;
console.log(tagId); // outputs: 1234
console.log(req.params.tagid); // outputs: 1234
否则,如果您的路线如下所示,请使用以下代码:
localhost:8888/p/1234

var tagId = req.query.tagid;
console.log(tagId); // outputs: 1234
console.log(req.query.tagid); // outputs: 1234
var tagId = req.params.tagid;
console.log(tagId); // outputs: 1234
console.log(req.params.tagid); // outputs: 1234

您使用的是哪个版本的express?我刚刚在
express-3.4.4
上对此进行了测试,效果很好。如果使用顶部解决方案,请记住使用
/p/5
,如果使用底部解决方案,请记住使用
/p?tagId=5
。顶部解决方案(/p/5)非常适合我。但是底部一个/p?tagId=5会给我错误“tagId设置为未定义”非常感谢macek。你节省了我的时间。这是我的错误,我完全按照你说的做了,但在url中我使用了“tagid”而不是“tagid”。
req.param()
是:
使用req.params、req.body或req.query,如果适用。
对于命名路由“参数”(例如
/p/:tagid
)使用。对于查询字符串(例如,
/p?tagId=5
)使用。在express中,
/p?tagId=1234
,tagId称为查询字符串,而不是URL参数。URL参数应为
/p/:tagId
。此方法已被弃用。改为使用req.query。@alextc
req.query
req.params
是如此不同的事情,替换
req.param('x')
的是
req.params.x
而不是req.query。通常人们不会这样创建url
/p/:tagid=1234