我在一个基于Node的Web服务器中使用Express(4.10.8),该服务器使用'vhost'包处理多个站点。每个域都在自己的目录中,每个域都有自己的“app.js”代码。
我正在尝试重写请求URL(说来话长),下面的代码在app.use()函数中,按照预期的方式运行。
但是在这个函数之外,被删除的日志调用会失败,并出现一个错误,表明我对req.url的引用超出了作用域:
ReferenceError: req is not defined
at Object.<anonymous> (/home/brianc/websites/rppc/app.js:12:36)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/home/brianc/websites/app.js:82:15)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
{"level":"error","message":"Forever detected script exited with code: 1"}
我试图弄清楚到底发生了什么,当然,也是为了解决这个问题,因为我需要重写的请求URL,而不是进入服务器的URL。正则表达式在函数内部按预期工作。
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/../public'));
app.use(express.static(__dirname ));
app.use(function(req, res, next) {
req.url = req.url.replace(/(.*)?<!\.html|\.pdf$/, "/$1.pdf");
req.url = req.url + ".pdf";
console.log("URL was changed to: " + req.url);
next();
});
//console.log("We changed URL to " + req.url);
app.use(express.static(__dirname,{extensions: ['html','pdf']}));
module.exports = app;
1条答案
按热度按时间tuwxkamq1#
找到答案了!!
在Express v4中,不能在use()方法中调用请求URL。但是它将与get()方法一起工作。
所以这段代码做了我上面想做的事情,即。将“.pdf”添加到没有任何后缀的任何请求URL。...