ExpressJS如何确定请求的资源是否为;“静态”;文件
我使用JSPM管理客户端依赖项,并使用ExpressJS提供文件 我的目录结构是ExpressJS如何确定请求的资源是否为;“静态”;文件,express,jspm,Express,Jspm,我使用JSPM管理客户端依赖项,并使用ExpressJS提供文件 我的目录结构是 节点单元 路线 观点 app.js 公开的 css 图像 js main.js jspm_包 system.js npm angular2@2.0.0-beta.7.js 我在我的Express app.js中设置了静态路线,如下所示: app.use(express.static(path.join(__dirname, 'public'))); 正如我在
- 节点单元
- 路线
- 观点
- app.js
- 公开的
- css
- 图像
- js
- main.js
- jspm_包
- system.js
- npm
- angular2@2.0.0-beta.7.js
app.use(express.static(path.join(__dirname, 'public')));
正如我在请求GET/jspm_包/system.js时所期望的那样
它正确地提供文件
但是当我请求GET/jspm_包/npm时/angular2@2.0.0-beta.7.js
它给了我一个404-找不到
我怀疑文件名中的某些特殊字符会使express无法将请求解析为“静态”文件并使用正确的静态路由
如何测试express是否将请求标记为“静态”?
如何覆盖express用来将请求标记为“静态”的express正则表达式(或任何机制)?
如何使用自己的正则表达式编写自定义中间件,并将请求转发给static
谢谢。使用express时,必须确保以正确的顺序注册了正确的中间件 根据您的问题,
express如何将资源标识为静态的?
,实际上express并不确定其是否为静态的,它甚至不了解请求类型,express所做的是为给定的请求执行适当的中间件
当express收到一个请求时,它会继续并开始按顺序执行匹配的中间件,直到它们用完为止
所以在实践中,您总是在动态路由之前先注册静态中间件(就在请求解析器之后)。如下图所示
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
//Register your static middleware
app.use(express.static(path.join(__dirname, 'public')));
//Other cool code
app.use('/', routes);
现在,请求将首先通过express.static
中间件,如果它没有找到匹配的文件,它将在内部调用next
,并将请求传递给链中的下一个中间件
也就是说,假设您在public
目录中有一个名为users
的静态文件,并且有一个名为routes.get('/users'..
)的路由。现在,当用户请求/users
时,请求将首先传递到express.static
,如果它找到users
文件(在本例中就是这样做的),我们使用routes.get
注册的路由将永远不会被调用。现在,如果您执行相同的操作,只需将名为users
的文件从public
文件夹中删除,那么express.static
中间件将无法找到匹配的文件,并将请求传递给链中的下一个中间件,即routes.get(
/users'`
Express不会通过匹配或使用正则表达式来假定或标识资源为静态资源。如果Express.static
中间件找到它,它将为它提供服务,否则它将把请求传递给队列中的下一个中间件
虽然我很确定,但我试图复制您的问题,我收到了包含所有特殊字符的文件,如下图所示
请再次确认以下内容:
express.static
中间件/USERS
和/USERS
都将匹配文件/public/USERS
(如果存在)希望这有帮助!如果您需要进一步的帮助,请告诉我…:)使用express时,您必须确保以正确的顺序注册了正确的中间件 根据您的问题,
express如何将资源标识为静态的?
,实际上express并不确定其是否为静态的,它甚至不了解请求类型,express所做的是为给定的请求执行适当的中间件
当express收到一个请求时,它会继续并开始按顺序执行匹配的中间件,直到它们用完为止
所以在实践中,您总是在动态路由之前首先注册静态中间件(就在请求解析器之后)
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
//Register your static middleware
app.use(express.static(path.join(__dirname, 'public')));
//Other cool code
app.use('/', routes);
现在,请求将首先通过express.static
中间件,如果它没有找到匹配的文件,它将在内部调用next
,并将请求传递给链中的下一个中间件
也就是说,假设您在public
目录中有一个名为users
的静态文件,并且有一个名为routes.get('/users'..
)的路由。现在,当用户请求/users
时,请求将首先传递到express.static
,如果它找到users
文件(在本例中就是这样做的),我们使用routes.get
注册的路由将永远不会被调用。现在,如果您执行相同的操作,只需将名为users
的文件从public
文件夹中删除,那么express.static
中间件将无法找到匹配的文件,并将请求传递给链中的下一个中间件,即routes.get(
/users'`
Express不会通过匹配或使用正则表达式来假定或标识资源为静态资源。如果Express.static
中间件找到它,它将为它提供服务,否则它将把请求传递给队列中的下一个中间件
虽然我很确定,但我试图复制您的问题,我收到了包含所有特殊字符的文件,如下图所示
Ple