Express只加载主页面

我试图学习快递。 我正在使用FS来加载我的HTML页面。 我唯一能够通过谷歌searchfind的是使用ASP.NET而不是Express。

Server.js:

var express = require('express'); var path = require('path'); var fs = require('fs'); var app = express(); app.use(require('body-parser').urlencoded({ extended: true })); app.use(express.static(path.join(__dirname+'/'))) app.get('/', function(a,b,c){ fs.readFileSync('index.html'); }); app.post('/testaction', function(a,b){ console.log(a.body.log); fs.readFileSync('Logged.html'); }); app.listen(3000); 

index.html的:

 <!DOCTYPE html> <html> <head> <title>Test Page</title> </head> <body> <form method="post" action="http://localhost:3000/testaction"> <h1>Log This:</h1> <input type="text" name="log"/> <input type="submit", value="Press Me!"/> </form> </body> </html> 

为了提供文件,你不必使用fs。 例:

 app.get('/', function(req, res, next) { res.render('index'); }); 

如果你需要redirect,你可以使用:

 res.redirect('/staticFile.html'); 

删除这些行:

 app.get('/', function(a,b,c){ fs.readFileSync('index.html'); }); 

这行是中间件,它适用于每个请求的所有路由:

 app.use(express.static(path.join(__dirname+'/'))) 

它的目的是从你提供的任何path提供静态文件。 在这种情况下,您从根目录中提供服务,以便您可以导航到所有代码文件,例如http:// localhost:3000 / package.json 。

它适用于所有的HTTP方法,获得后置等…

当你写app.get('/'你用一个新的路由覆盖这个中间件,并尝试只提供一个文件,只要放下这些代码,你就可以静态地从上面指定的目录中服务一切。

如果您不想提供代码文件,请将您的静态文件放在不同的文件夹(如“站点”)中,并将静态path设置为该文件夹,例如:

 app.use('/', express.static(__dirname + '/site'));