节点JS Express显示404的所有请求

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

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

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

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

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

如果你想更多地了解它,静态中间件内部使用https://github.com/pillarjs/sendstream文件

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

它会默认设置/ src/client/index.html ,你可以通过设置index选项来改变这个行为https://github.com/expressjs/serve-static

如果你想redirect/*./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'); }); 

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