gpt4 book ai didi

regex - 在带有路由器中间件的 Express 应用程序中使用正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:09 24 4
gpt4 key购买 nike

我尝试在 app.use 语句中使用正则表达式模式而不是字符串来为路径设置路由器中间件。为什么这不起作用?

var express = require("express"),
bodyParser = require("body-parser"),
app = express();

app.use('/', express.static(__dirname+'/public'));
app.use(bodyParser.urlencoded({ extended: false }));
var router = express.Router();
app.use(/\/regexPath/, router);

但这确实如此吗?

var router = express.Router();
app.use('/regexPath', router);

使用第二个的唯一问题是它接受所有大小写的混合。使用 reg exp 强制它变成小写,这就是我们想要的。 Express 4 中的“区分大小写的路由”选项似乎不起作用,因为没有任何变化。

我知道正则表达式的工作方式与在另一个应用程序中的工作方式相同。我很困惑为什么在不同的服务器上做同样的事情会给我这个错误。

Router.use() requires callback functions but got a [object RegExp]

编辑 - 以下作品。应用程序.js:

var cluster = require('cluster');

if(cluster.isMaster) {
// master process
var cpus = require('os').cpus().length;
console.log('Master process: num CPUs='+cpus);
for(var i=0; i < cpus; i++) {
cluster.fork();
}
// Listen for dying workers
cluster.on('exit', function (worker) {
// Replace the dead worker, we're not sentimental
console.log('Worker '+worker.id+' died :(');
cluster.fork();
});
} //end master process

else {
// child instances
var express = require("express"),
app = express();
app.use('/', express.static(__dirname+'/public'));
require('./routes')(app);
app.listen(8666);
} //end worker process

routes.js:

module.exports = function(app){
// weather app
var weather = require('./handlers/weather');
app.get(/\/weather/, weather.findAll);
app.get(/\/weather\/:id/, weather.findById);
app.post(/\/weather/, weather.add);
app.put(/\/weather\/:id/, weather.update);
app.delete(/\/weather\/:id/, weather.delete);

// image proxies
app.get(/\/radar\/local/, weather.localRadar);
app.get(/\/radar\/regional/, weather.regionalRadar);
app.get(/\/radar\/satellite/, weather.satellite);
app.get(/\/radar\/map/, weather.map);

// blood pressure app
var bp = require('./handlers/bp');
app.get(/\/BP/, bp.findAll);
app.get(/\/BP\/:id/, bp.findById);
app.post(/\/BP/, bp.add);
app.put(/\/BP\/:id/, bp.update);
app.delete(/\/BP\/:id/, bp.delete);

// nutrition app
var nutrition = require('./handlers/nutrition');
app.get(/\/nutrition/, nutrition.findAll);
app.get(/\/nutrition\/:id/, nutrition.findById);
app.post(/\/nutrition/, nutrition.add);
app.put(/\/nutrition\/:id/, nutrition.update);
app.delete(/\/nutrition\/:id/, nutrition.delete);
};

所以我真的不知道有什么不同可以让这个工作和我帖子中的第一个工作不工作。

最佳答案

我认为您使用的是旧版本的 Express 升级到版本 4,但它应该可以正常工作。

这里是 app.use() Express 3.X 的 Api Documentation

A route will match any path, which follows its path immediately with either a “/” or a “.”. For example: app.use('/apple', ...) will match /apple, /apple/images, /apple/images/news, /apple.html, /apple.html.txt, and so on.

这里是 Express 4.X Documentation

path can be a string representing a path, a path pattern, a regular expression to match paths, or an array of combinations thereof.

关于regex - 在带有路由器中间件的 Express 应用程序中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32766451/

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