Express 仅加载主页

Express Only loads main page

我正在努力学习 express。我正在使用 FS 加载我的 HTML 页面。通过 google 搜索,我唯一能找到的是使用 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');
});

如果需要重定向,可以使用:

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

删除这些行:

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

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

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

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

它适用于所有 HTTP 方法,get post put 等...

当您编写 app.get('/' 时,您会使用新路由覆盖该中间件并尝试仅提供一个文件。只需删除该代码,您将从上面指定的目录中静态地提供所有内容。

如果您不想提供您的代码文件,请将您的静态文件放在不同的文件夹中,例如 "site" 并将您的静态路径设置为该文件夹,例如:

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