gpt4 book ai didi

javascript - node.js 在服务器目录中提供 HTML 文档

转载 作者:行者123 更新时间:2023-12-02 15:18:57 25 4
gpt4 key购买 nike

所以我有一个非常简单的问题,目前我的服务器文件和 HTML 文档都位于同一目录中。然而,我意识到这导致了一个相当烦人的问题。如果我用户输入:

http://localhost:3000/HTML/homepage.html

服务器为他们提供 HTML 文档,通常他们必须先登录并验证 session ID,然后才能访问主页。

有什么方法可以拒绝访问服务器目录中的文件吗?

我的代码当前运行方式的示例:

var http = require('http'),
fs = require('fs');

var path = require("path");
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser')
var session = require('express-session')

var sqlite3 = require('sqlite3').verbose();
var express = require('express');
var app = express();



var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;

console.log('Example app listening at http://%s:%s', host, port);
});

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


app.get('/signin', function (req, res) {
res.sendFile(path.join(__dirname + '/HTML/signin'));
});

app.post('/signin', function (req, res) {
var email = req.body.email;
var password = req.body.password;


if (email!="" || password != ""){
req.session.sessID = email //using email for example purposes

res.setHeader('Content-Type', 'application/json' );
res.send(JSON.stringify({
success: true //the client then catches the JSON, and will redirect to http://localhost:3000/homepage
}));
}
}

app.get('/homepage', function(req, res){
if (req.session.sessID == undefined){
res.send("You must login first!")
}else{
res.sendFile(path.join(__dirname + '/HTML/homepage.html'));
}
}

最佳答案

问题的根源是这样的:

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

这告诉express提供它可以在您的硬盘驱动器上从应用程序目录向下找到的任何文件。这是不可取的。如果在浏览器中输入正确的路径,这甚至可以提供您的私有(private)服务器源代码文件。

您应该区分静态文件和动态处理的路由,并确保它们之间不存在冲突的可能性。

一种常见的设计是在硬盘驱动器上为静态 HTML 文件指定一个单独的目录(不是您的应用程序目录),然后设置到那里的快速静态路由。并且,请确保您的动态路由不会满足静态路由的要求。

例如,如果您的静态 HTML 文件位于 __dirname 目录下的子目录 HTML 中,那么您可以执行以下操作:

app.use(express.static(path.join(__dirname, "HTML")));

然后,确保该目录中没有任何动态 HTML 文件(例如 homepage.html)(将它们放在 express.static() 永远看不到的其他位置)。

<小时/>

如果您实际上不希望用户能够看到除自定义路由之外的任何内容,请完全删除 app.use(express.static(__dirname)); 行并只需为您正在服务的每个页面创建自定义路由即可。

关于javascript - node.js 在服务器目录中提供 HTML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com