2016-09-27 97 views
1

我重定向到错误的html页面有一个名为login.html的一个登录页面,并呼吁index.html的索引页。我想进行身份验证,只有连接的用户才能访问索引页面。在node.js中使用express.static(__目录名)功能时用快递

我没有在登录HTML页面上实现post方法。我通过这个网址去手动发送的登录用户名和密码:

http://localhost:2222/?username=a&password=b 

一切工作,但我看不到我的CSS,JS和index.html的一些其他文件。为了解决这个问题,我说这在我的代码开头:

app.use(express.static(__dirname)); 

的问题是,现在如果我去本地主机2222则显示index.html文件,而不是login.html的文件。即使我使用:

app.get('/', function (req, res) { 
    res.redirect('/login'); 
}); 

它是怎么回事?我该如何解决这个问题?

完整的代码是:

var express = require("express"); 
var port = process.env.PORT || 2222; 
var app = express(); 
app.use(express.static(__dirname)); 
var session = require('express-session') 
app.use(session({ 
    secret: 'keyboardcat', 
    resave: true, 
    saveUninitialized: true 
})); 

function checkAuth(req, res, next) { 
    if (!req.session.user_id) { 
     res.sendfile('login.html'); 
    } else { 
     next(); 
    } 
} 
app.get('/', function (req, res) { 
    res.redirect('/login'); 
}); 
app.get("/login", function(req, res) { 
    if (req.query.username === 'a' && req.query.password === 'b') { 
     req.session.user_id = req.query.username; 
     res.redirect('index'); 
    } else { 
     res.sendfile('login.html'); 
    } 
}); 
app.get('/index', checkAuth, function(req, res){ 
    res.sendfile('index.html'); 
}); 

app.get('/logout', function (req, res) { 
    delete req.session.user_id; 
    res.redirect('/login'); 
}); 

我的文件树如下:index.html的,login.html的和server.js是一个名为服务器文件夹中。在此文件夹服务器也是4个文件夹:JSCSS图片随机

回答

2

你正在使用项目文件夹进行静态显示app.use(express.static(__dirname));。 ExpressJS使用index.html作为默认索引页面。因此,您需要将index.html重命名为main.html之类的其他内容,并使用res.sendfile('main.html');

替代的解决方案:

创建一个文件夹说public,并把所有静态内容(JS,CSS和图像)到public文件夹,并请不要将HTML文件放入文件夹public使用app.use(express.static(__dirname) + '/public');

+0

这是实际的解决方案。我只是将index.html重命名为main.html,它起作用了! – dll

0

你必须定义根目录作为第一个参数提供静态内容:

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

或者你也可以使用:

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

这不是一个需求,如果你想将例如'/ css/main.css'改为'/ helloworld/css/main.css',那么它就是一个虚拟路径前缀选项。使用('/ helloworld',express.static(__ dirname))'。 – Svenskunganka

2

这是非常重要的,你解决您的目录结构如果您使用express.static,因为此时可以运行http://localhost:2222/server.js并下载服务器文件,这是您当前存储秘密的地方。

我建议你做的是创建一个server/static目录,并将所有的HTML,CSS,JS,图片和其他资源里面,然后改变这一行

app.use(express.static(__dirname)); 

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

此外,你应该从来没有,永远通过GET发送身份验证数据像你目前使用http://localhost:2222/?username=a&password=b。你需要改变这条路线进入POST请求,通过编辑这一行:

app.get("/login", function(req, res) { 

app.post("/login", function(req, res) { 

您可能需要从<form method="get" ...>的HTML来改变你的form<form method="post" ...>

+0

我做了您建议的更改。谢谢:) – dll