2017-12-14 11 views
0

私はこのようなエクスプレスルートを使用していましたが、私は自分のURLに最初にクエリ文字列を入れたいと思っています。Express req.query always empty

app.get('/', function(req, res){ 
    res.render('index', {}); 
}); 
app.get('/us01', function(req, res){ 
    console.log('query: '+JSON.stringify(req.query)); 
    res.render('templates/us01', {}); 
}); 
app.get('/benchmark', function(req, res){ 
    res.render('templates/benchmark', {}); 
}); 

ただし、/ us01の後に追加するクエリ文字列に関係なく、クエリ文字列は表示されません。たとえば、 "localhost:9200/us01?a = 1" req.queryは私に{a:1}を返しますか?これは共通のものですか?私はここで何が欠けていますか?

マイapp.js

"use strict"; 
var express = require('express'); 
var expApp = express(); 
var http = require('http').Server(expApp); 
var path = require('path'); 
var bodyParser = require('body-parser'); 

// all environments 
expApp.set('port', process.env.PORT || 5555); 
expApp.set('views', __dirname + '/views'); 
expApp.set('view engine', 'ejs'); 
expApp.use(bodyParser.urlencoded({ extended: true })); 
expApp.use(bodyParser.json()); 
expApp.use(express.static(path.join(__dirname, 'public'))); 
//----------------ROUTES--------------------------// 
require("./routes/route.js")(expApp); 

http.listen(expApp.get('port'), function(){ 
    console.log('Node-Server listening on port ' + expApp.get('port')); 
}); 

マイindexController.jsを有する:

$stateProvider 
     .state('us01', { 
      url: '/us01', 
      templateUrl: '/us01' 
     }).state('benchmark', { 
      url: '/benchmark', 
      templateUrl: '/benchmark' 
     }).... 
+1

コンソールにはどうなっていますか? – wrangler

+0

@wranglerクエリ:{} –

答えて

1

この単純なコード:

const express = require('express'); 
const app = express(); 

app.get('/us01', function(req, res) { 
    console.log(req.query); 
    res.send("ok"); 
}); 

app.listen(80); 

そして、http://localhost/us01?a=1によってアクセスがコンソールにこの出力を生成します:

{ a: '1' } 

それとも、私が使用している場合:

console.log('query: ' + JSON.stringify(req.query)); 

はその後、私はコンソールでこれを参照してください。

だから、
query: {"a":"1"} 

、明らかに何か他のものは、あなたのコードで間違っています。


"localhostが:?9200/US01 = 1":、正しいreq.queryは私が{1}を取得する必要がありますか?

表示するコードがlocalhostのポート9200で実行されている場合は、query: {"a":"1"}が表示されます。

これは共通のものですか?

いいえ、表示されているコード以外は、そのコードだけで何も問題がないため、破棄されます。

私はここで何が欠けていますか?検討する

物事:あなたはあなたの期待経路のいずれかを打ったとき、あなたは、コンソールでの任意の出力を

  1. を取得していますか?
  2. サーバーが稼動しており、ブラウザがルートハンドラーに当たることを証明できますか?
  3. console.log(req.query)とすれば、どのような出力が得られますか?
  4. 以前のサーバーを強制終了し、表示されたコードに対応するサーバーを起動したことを確認してください。人々は、まだ動作していると思われるコードを実際には含んでいない以前のバージョンのサーバーにだまされることがあります。
  5. 使用しているURLのポートと一致する希望のポートでサーバーを実行していることを100%保証していますか。
  6. それ以外の場合は、コンピュータを再起動すると、以前のバージョンのものがまだ実行されていないことがあります。
+0

こんにちは。あなたの詳細な指示をありがとう。私はapp.jsと、私がルーティングに関係していると思ういくつかの他のファイルを含めるように編集しました。私は正しいポートで動作していると確信しています。私もconsole.log(req.query)を直接試してみましたが、[object Object]を出力しています。だから私はJSON.stringifyを追加しようとしたのです。私が示したファイルはreq.queryに干渉していると思いますか?おそらく何か依存関係を扱うでしょうか? –

+0

@ Chloe.C - 'console.log(req.query)'が '[object Object]'を生成していれば、何か不具合があります。これは、 'console.log()'がオブジェクトを出力する方法ではないので、決して起こらないはずです。このコードを正確に実行しているのは何ですか?それはnode.jsですか?正確なバージョンは? – jfriend00

+0

@ Chloe.C - 私はあなたのコードでそれを私の質問で1つのアプリケーションファイルを作成し、実行することをお勧めします(あなたは必要な場合はポート番号を変更することができます)。あなたのnode.js/express環境に問題があるのか​​、それともあなたのコードなのかを見てみましょう。 – jfriend00