我在public / images / picture.jpg中显示带有玉石的图片,但是我想保护一些图片或限制对公共文件夹的访问,怎么办?
project
node_modules
public
images
image.jpg
javascripts
stylesheets
protected_folder*
image_protected.jpg
views
注意:对于所有这些示例,我使用的应用程序结构如下:
.
├── app.js
└── public
├── protected
│ └── file.txt <-- contains text "protected file"
└── regular
└── file.txt <-- contains text "regular file"
您有两种选择。最简单的方法是让Express 在公共中间件 之前 通过路由器路由请求,从而使您可以截获请求:
var express = require('express');
var http = require('http');
var path = require('path');
var app = express();
// use app.router before express.static
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
function userIsAllowed(callback) {
// this function would contain your logic, presumably asynchronous,
// about whether or not the user is allowed to see files in the
// protected directory; here, we'll use a default value of "false"
callback(false);
};
app.get('/', function(req, res, next) {
res.end('Home page');
});
app.get('/protected/*', function(req, res, next) {
userIsAllowed(function(allowed) {
if (allowed) {
next(); // call the next handler, which in this case is express.static
} else {
res.end('You are not allowed!');
}
});
});
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000');
});
结果:
http://localhost:3000/regular/file.txt # regular file
http://localhost:3000/protected/file.txt # You are not allowed!
这种方法的问题在于,在提供静态文件之前,请求必须一直通过应用程序的路由器进行处理,虽然效率不高,但可以满足您的需求(您需要采取一些措施)测量并自己找出)。
另一个选择是在中间件链中插入一个基本功能相同的小功能,但不需要在整个应用路由器中运行:
var express = require('express');
var http = require('http');
var path = require('path');
function userIsAllowed(callback) {
// this function would contain your logic, presumably asynchronous,
// about whether or not the user is allowed to see files in the
// protected directory; here, we'll use a default value of "false"
callback(false);
};
// This function returns a middleware function
var protectPath = function(regex) {
return function(req, res, next) {
if (!regex.test(req.url)) { return next(); }
userIsAllowed(function(allowed) {
if (allowed) {
next(); // send the request to the next handler, which is express.static
} else {
res.end('You are not allowed!');
}
});
};
};
var app = express();
app.use(protectPath(/^\/protected\/.*$/));
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function(req, res, next) {
res.end('Home page');
});
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000');
});
这执行的逻辑基本相同,但是它不是在 整个
应用路由器中路由每个请求,而是在每个请求的开头运行一个小功能,以检查所请求的URL是否与您传入的正则表达式匹配。它运行检查以查看用户是否可以访问该文件。
结果:
http://localhost:3000/regular/file.txt # regular file
http://localhost:3000/protected/file.txt # You are not allowed!
若需要在 San CLI UI内建的http服务器上暴露一些静态文件,例如:为自定义视图指定图标。可以通过在插件包根目录里可选的放置一个public文件夹,这个文件夹里的任何文件都会暴露至 /_plugin/:id/* 的http路由。 例如,如果将 x-logo.png 文件放置到 san-cli-ui-widget-x/public/ 文件夹,那么 cli-ui 加载插件的时候可以通过 /_p
问题内容: 有人可以给我解释一下/ 内部 类有什么区别吗? 我知道内部类应尽可能避免(如本文所述)。 但是据我所知,使用或修饰符之间没有区别。 看一下这个例子: … … 所有这些都可以编译,并且无论我声明 还是都有效。 我想念什么?请指出一个使用或有所不同的情况。 谢谢。 问题答案: 该访问修饰符将限制从比在同一个包及其子类之外的其他类的访问。 在所示的示例中,和和将具有相同的效果,因为它们位于同
Android Api 29在文件和文件夹方面有很大的变化。到目前为止,我还没有找到在内部存储器中创建一个公共可见的文件夹的方法。我创建的每个文件夹只能由我的应用程序看到。 我编写了一个应用程序来创建数据文件,这些文件将被其他应用程序拾取,例如总指挥官将它们复制到目的地。在我激活Api 29之前,一切都很好。我的一些客户确实使用像素手机,他们使用Android 10。 如何在Android 10中
我有一个经过验证的谷歌客户端,我想列出其他人公用文件夹中的文件(我认为共享或不共享的文件夹是不相关的,因为它是公用的) 这是我在NodeJS中的代码 注意:文档中没有“folderId”选项:https://developers.google.com/drive/api/v3/reference/files/list-只是一个drivid选项 虽然我将corpa设置为“drive”和drive I
问题内容: 如何在node.js上移动文件(如mv命令外壳)?有什么方法可以使用,还是应该读取文件,写入新文件并删除旧文件? 问题答案: 根据seppo0010的评论,我使用了重命名功能。 http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback fs.rename(oldPath,newPath