Express req.query始终为空

时间:2017-12-14 21:08:04

标签: node.js express

我正在使用这样的快速路由,我希望我的网址最初包含查询字符串。

char_length()

但是,无论我在/ us01之后添加什么查询字符串,我都不会打印查询字符串。例如,“localhost:9200 / us01?a = 1”req.query应该让我{a:1},对吗?这是常见的事吗?我在这里缺少什么?

我的app.js

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

我的indexController.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'));
});

1 个答案:

答案 0 :(得分:2)

这个简单的代码:

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"}

所以,显然你的代码还有其他错误。

  

"本地主机:9200 / US01一个= 1" req.query应该给我{a:1},对吗?

如果您显示的代码在localhost上的端口9200上运行,它应该为您query: {"a":"1"}

  

这是常见的吗?

没有。除了显示的代码之外的其他东西都被破坏了,因为只有那段代码没有任何问题。

  

我在这里缺少什么?

要检查的事项:

  1. 当您点击任何预期路线时,您是否在控制台中获得任何输出?
  2. 您能证明您的服务器正在运行且您的浏览器正在使用您的路由处理程序吗?
  3. 如果你只做console.log(req.query),你会得到什么输出?
  4. 您是否确定已杀死任何先前的服务器并启动与您显示的代码对应的服务器。人们有时会被仍在运行的服务器的先前版本所迷惑,并且实际上并不包含他们认为正在运行的代码。
  5. 您是否100%确定您在所需的端口上运行服务器,该端口与您正在使用的URL中的端口相匹配。
  6. 当所有其他方法都失败时,有时计算机重启会确保没有任何先前版本的任何内容仍在运行。