Node JS Express显示404的所有请求

时间:2015-06-11 07:27:48

标签: javascript node.js

所有请求都在控制台中显示GET / 404 8.128 ms-13

我已经发布了下面的代码,代码中没有错误。我可以运行其他NodeJS个应用程序。但这在控制台中显示404。它甚至没有显示fav图标。它曾经显示Cannot GET /错误,当时可以看到收藏夹图标。

'use strict';
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var favicon = require('serve-favicon');
var logger = require('morgan');
var port = process.env.PORT || 8001;
var four0four = require('./utils/404')();
var environment = process.env.NODE_ENV;
app.use(favicon(__dirname + '/favicon.ico'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(logger('dev'));
app.use('/api', require('./routes'));
console.log('About to crank up node');
console.log('PORT=' + port);
console.log('NODE_ENV=' + environment);
switch (environment){        
default:
    console.log('** DEV **');
    app.use(express.static('./src/client/'));
    app.use(express.static('./'));
    app.use(express.static('./tmp'));
    app.use('/app/*', function(req, res, next) {
        four0four.send404(req, res);
    });
    app.use('/*', express.static('./src/client/index.html'));
    break;
}
app.listen(port, function() {
console.log('Express server listening on port ' + port);
console.log('env = ' + app.get('env') +
            '\n__dirname = ' + __dirname  +
            '\nprocess.cwd = ' + process.cwd());
});

1 个答案:

答案 0 :(得分:1)

根据http://expressjs.com/starter/static-files.html我认为您的路线app.use('/*', express.static('./src/client/index.html'));将使用./src/client/index.html作为基本路径,并附加您提供的任何内容以查找文件。例如

/some-file会查找明显不存在的./src/client/index.html/some-file

如果您想更多地了解它,静态中间件在内部使用https://github.com/pillarjs/send来传输文件

所以你可以做到这一点 app.use('/*', express.static('./src/client'));

默认情况下,会将/设置为src/client/index.html,您可以通过设置https://github.com/expressjs/serve-static

中指定的index选项来更改此行为

如果您想将/*重定向到./src/client/index.html,请执行此操作

// first set the static middleware
app.use('/public', express.static('./src/client'));
// then use redirect
app.get('/*', function(req, res, next){
  res.redirect('/public/index.html');
});

此设置会将所有内容重定向到public/index.html。如果要添加API或其他路由,请将其放在app.get('/*')

之前