gpt4 book ai didi

linux - Node.js Express 静态 Assets 的大小写敏感性

转载 作者:IT王子 更新时间:2023-10-29 00:33:41 25 4
gpt4 key购买 nike

如何设置 express.static 的路由是否区分大小写?例如Express 是否应该通过提供名为 Image.jpeg 的本地文件来处理对 image.jpeg 的请求。

在调用 express.Router([options]) 时有一个 caseSensitive 选项(定义在 http://expressjs.com/en/4x/api.html )但是在调用 express.static(root, [选项])(同一链接中的文档)。

默认情况下,从不区分大小写的卷 (/Mac OS X) 到区分大小写的卷 (/Linux),我会得到不同的服务静态文件的行为。这会导致我们的应用程序出现不一致的错误 - 大小写不匹配的内容在 Mac OS X 下可以在本地运行,但在部署到 Linux 服务器时会失败。

最佳答案

我也想要这个,所以我想出了一个快速处理大小写不匹配的 404 请求的方法。

它不是特别高效,所以我只在开发中运行它。它只检查文件名。它不检查文件上方文件夹的大小写。

使用方法:

var express = require('express');

var app = express();
// You can do this before or after the express() call
// But it must come before express.static() is called
var inDevelopment = (process.NODE_ENV || 'local') === 'local';
if (inDevelopment) {
require('./modules/makeExpressStaticCaseSensitive')(express);
}

app.use(express.static(path.join(__dirname, 'public_html')));

脚本module/makeExpressStaticCaseSensitive.js

module.exports = function (express) {
var fs = require('fs')
var pathlib = require('path');
var parseUrl = require('express/node_modules/parseurl')

var oldStatic = express.static;
var newStatic = function (root, options) {
var opts = Object.create(options || null);

var originalHandler = oldStatic(root, options);

var wrappedHandler = function (req, res, next) {
var filepath = pathlib.join(root, parseUrl(req).pathname);
var dirpath = pathlib.dirname(filepath);
var filename = pathlib.basename(filepath);

// @todo Reading the entire directory listing and then searching it is quite inefficient for large folders
// We should find a more efficient way to do this for one file at a time
fs.readdir(dirpath, function (err, files) {
if (err) return next(err);

var fileIsThere = files.indexOf(filename) >= 0;
if (fileIsThere) {
originalHandler(req, res, next);
} else {
res.status(404).end();
}
});
};

return wrappedHandler;
};
express.static = newStatic;
};

我写了一个更高效的版本,它缓存 readdir() 的输出几秒钟,并检查整个路径,但它有点长。

关于linux - Node.js Express 静态 Assets 的大小写敏感性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36845889/

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