【问题标题】:Express routing on root "/" doesn't work in app.get根“/”上的快速路由在 app.get 中不起作用
【发布时间】:2015-11-28 00:19:01
【问题描述】:

我一直遇到这个问题,由于某种原因,Express 路由看不到我的 root 获取功能。我已经这样声明了我的app.js

var index = require('./app/routes/index');
var app = express();
app.use('/', index);

然后在我的index.js 中,我的定义是这样的:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  console.log('Enter root.');
});

router.get('/something', function(req, res, next) {
  console.log('Enter something.');
});

快速路由到'/something' 很好,但看不到'/'。有人知道为什么它不起作用吗?谢谢。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    根据新信息修改:

    如果您在浏览器中返回 304 状态,那是因为浏览器已经缓存了 GET 请求,并且服务器告诉浏览器页面没有更改,因此浏览器可以使用缓存的副本。

    您可以通过更改服务器随请求发送的标头来使页面不可缓存。

    有关详细信息,请参阅 Cache Control for Dynamic Data Express.JSNodeJS/express: Cache and 304 status codeNodejs Express framework caching


    你在index.js 中没有显示exports 所以这一行:

    var index = require('./app/routes/index');
    

    什么也做不了。 index 是一个空对象,因此:

    app.use('/', index);
    

    什么都不做,事实上,甚至可能导致错误。


    也许你想要的是这样的:

    var express = require('express');
    var router = express.Router();
    
    router.get('/', function(req, res, next) {
      console.log('Enter root.');
    });
    
    router.get('/something', function(req, res, next) {
      console.log('Enter something.');
    });
    
    // export your router
    module.exports = router;
    

    那么,你其他文件中的index就是路由器了。

    【讨论】:

    • 我确实在最后声明了我的module.exports = router。抱歉,我忘记在问题中添加该行。
    • 那么您可能只需要app.use(index);,这样您的路由器就可以看到顶级 URL。
    • 我试过了,还是不行。我尝试添加router.post('/'... 以查看它是否有效并且确实有效。所以我唯一的问题是get方法。另外,我的主页似乎获得了 304 状态,而不是 200。这有什么关系吗?
    • @franco - 304 状态码表示您的页面已被浏览器缓存,Express 告诉浏览器它尚未更改。如果您不希望页面被缓存,则需要从服务器修改标头。仅供参考,304 状态代码是您问题的关键信息。
    猜你喜欢
    • 2019-06-08
    • 2018-12-16
    • 2016-10-03
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2021-11-04
    相关资源
    最近更新 更多