我有一个表单,我试图通过 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 时,我的错误是无法获取/登录。我可以做什么来解决这个问题?当我使用 Handlebars 使用模板渲染时,它似乎有效。
编辑:如果有帮助的话,我也在 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)
最佳答案
来自官方document
如console.log(__dirname + 'public')
所示,您得到C:\Users\Daniel\Desktop\web\drone-apppublic,这是目录不正确。
最安全的方法是使用node.js提供的路径lib
app.use(express.static(path.join(__dirname, 'public')));
C:\Users\Daniel\Desktop\web\drone-app\public\
最后,因为它提供静态文件,所以您需要包含文件扩展名
我刚刚测试了它,它仅适用于 localhost:3000/login.html
如果您想删除 html 文件的扩展名,您可以将规则添加到静态函数中
app.use(express.static(path.join(__dirname, 'public'),{
扩展名:['html']}
));
您可以找到其余可用的函数属性 here
关于node.js - ExpressJS 不使用 app.use 提供静态模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46162576/