ExpressJS不使用app.use提供静态模板

时间:2017-09-11 18:53:45

标签: node.js express

我有表单,我试图通过app.use使用ExpressJS作为静态页面,但我收到错误。

const express = require('express');
var app = express();
app.use(express.static(__dirname + 'public'));
app.listen(3000);

这是我的文件夹结构

App Name
-node_modules/
-public/
       login.html
-package-lock.json
-package.json
-server.js

当我转到localhost:3000 / login时,我的错误是无法GET /登录。我该怎么做才能解决这个问题?当我使用把手使用模板渲染时,它似乎有效。

编辑:如果有帮助,我也会在Windows 10上运行。           放app.use(express.static(__dirname + '**/public**'));也不能解决问题。

解决方案:

1

 const express = require('express');
 const path = require('path');
 var app = express();

 app.use(express.static(path.join(__dirname, 'public'),{
    extensions: ['html']}
  ));

 app.listen(3000);

2

const express = require('express');
const path = require('path');
var app = express();

app.get('/login', function(req, res){
  res.sendFile(__dirname + '/public/login.html')
 })

app.listen(3000)

3

const express = require('express');
const path = require('path');
var app = express();

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

app.get('/login', function(req, res){ 
 res.sendFile(__dirname + "/public/login.html");

}); 

app.listen(3000)

2 个答案:

答案 0 :(得分:1)

如果显示 CANNOT GET LOGIN 并告诉您无法访问login目录,但不会抛出错误,则表示您尚未指定登录您的server.js文件中的目录

请在尝试再次访问此链接之前添加此代码。

app.get('/doesItWork', function(req,res){
   res.send('it works!!');
})

app.get('/login', function(req, res){
   res.sendFile(__dirname + '/public/login.html')
})

答案 1 :(得分:1)

来自官方document

console.log(__dirname + 'public')所示 C:\ Users \ Daniel \ Desktop \ web \ drone-apppublic ,这是错误的目录。

最安全的方法是使用node.js提供的路径lib app.use(express.static(path.join(__dirname, 'public')));

<强> C:\用户\丹尼尔​​\桌面\网络\雄蜂应用内\公共\

最后,因为它需要提供静态文件,所以需要包含文件扩展名 我只测试了它,它只适用于localhost:3000/login.html如果要删除html文件的扩展名,可以将规则添加到静态函数中

app.use(express.static(path.join(__dirname, 'public'),{ extensions: ['html']} ));

您可以找到其余可用的功能属性here