ExpressでURLパラメータを取得する方法は?


290

tagid私のURLからの値を取得する際に問題が発生しています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'));
});

Controller/index.js

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;

routes/index.js

require('./controllers');
/*
 * GET home page.
 */

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

13
Expressでは/p?tagid=1234、tagidはURLパラメータではなくクエリ文字列と呼ばれます。URLパラメータはになります/p/:tagId
mikemaccana 14

回答:


704

Express 4.x

URLパラメータの値を取得するには、req.paramsを使用します

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

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

クエリパラメータを取得する場合は?tagId=5req.queryを使用します

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

// GET /p?tagId=5
// tagId is set to 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

Expressのどのバージョンを使用していますか?私はこれをテストしたところexpress-3.4.4、うまくいきました。
マセック

/p/5トップソリューションを使用している場合、または/p?tagId=5ボトムソリューションを使用している場合は、必ず使用してください。
マセック

上のソリューション(/ p / 5)は私にとっては完璧に機能しますが、下のソリューション/ p?tagId = 5はエラー「tagId is set to undefined」
user2834795

2
Macekをありがとう。あなたは私の時間を節約しました。それは私の間違いでした、私はあなたに従ってすべて行いましたが、URLでは「tagId」ではなく「tagid」を使用していました。
user2834795 2013年

11
req.param()非推奨ですUse either req.params, req.body or req.query, as applicable.。名前付きルートには「パラメータ」(例/p/:tagId)を使用しますreq.params。クエリ文字列(例/p?tagId=5)にはを使用しますreq.query
Nateowami

20

あなたは次のようなことができます req.param('tagId')


1
このメソッドは廃止されました。代わりにreq.queryを使用してください。
alextc 2018年

4
@alextc req.queryreq.paramsの交換が、大きく異なるものでreq.param('x')あるreq.params.xreq.queryありません。
Al-Mothafar

12

URLのクエリパラメータ値を取得する場合は、以下のコード部分に従ってください

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

Express param関数を使用してURLパラメータを取得したい場合

特定のパラメーターを取得する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+ '!');
});

5

これは、ルートが次のような場合に機能します。 localhost:8888/p?tagid=1234

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

それ以外の場合、ルートが次のようになる場合は次のコードを使用します。 localhost:8888/p/1234

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

2
一般的に人々はこのようにURLを作成しません/p/:tagid=1234
Ankur Loriya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.