Tag: 中间件

在Express中分组路线

我们可以在Laravel这样分组我们的路线: Route::group("admin", ["middleware" => ["isAdmin"]], function () { Route::get("/", "AdminController@index"); Route::post("/post", ["middleware" => "csrf", "uses" => "AdminController@index"); }); 基本上,pipe理员组中定义的所有路由将自动获取isAdmin中间件和组名称。 例如, post端点监听admin/post not /post Express有没有办法做同样的事情? 这将是真棒,因为我的Laravel路线曾经是如此干净,而我的快车路线有点混乱/重复。 这是我目前在Express上的routes.js。 app.get("/admin", [passportConfig.isAuthenticated, passportConfig.isAdmin], AdminController.index); app.post("/admin", [passportConfig.isAuthenticated, passportConfig.isAdmin], AdminController.postIndex); 谢谢。

如何在中间件中使用这个上下文

我为自己的目的编写了自己的中间件,如下所示: — myMiddleware.js module.exports = { fn1: function (req, res, next) { console.log('fn1'); next(); }, fn2: function (req, res, next) { console.log('fn2'); this.fn1(req, res, function () { next(); }); } }; 在我的sserver.js中,我使用如下的中间件: app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(require('./myMiddleware').fn2); 不幸的是,这是行不通的,因为这个上下文在fn2中不是myMiddleware.js对象。 如何使用适当的这个?

Expressjs:如何共享路由中间件

我定义了多个路由中间件,并希望跨多个路由/控制器共享它们。 这是我的设置: app.js需要./routes/index.js: // load fs module var fs = require('fs'); // import routing files module.exports = function(app){ fs.readdirSync(__dirname).forEach(function(file) { if (file == "index.js") return; var name = file.substr(0, file.indexOf('.')); require('./' + name)(app); }); }; index.js在dir中自动加载所有路由。 可能的路线文件可能如下所示: module.exports = function(app) { app.get('/contacts', function(req, res, next) { // routing stuff }); }; 现在我得到了路由中间件: function isAuthenticated(req, res, […]

“一切都是中间件”

我正在学习Koa JS,用于构build小型Web应用程序的服务器端部分。 看着YouTube教程和阅读指南,我看到一句话:“一切都是中间件(在Koa)。 我已经阅读了关于中间件的维基百科文章,并且search了这个术语,而且我对中间件是什么(很低层的东西和高层次编程之间的中间层)有一个粗略的理解。 但是我不明白“一切都是中间件”这个说法在Web应用程序和NodeJS的背景下是什么意思,为什么这是相关的。

Nodejs和连接“下一个”function

看来,如果我想要移动到Nodejs中的“下一个”function(通常可能是Javascript),我不能将parameter passing给下一个函数。 这是我的意思: app.get('/webpage', SomeFunction, NextFunction); function SomeFunction (req, res, next) { // Do things next(); } function NextFunction (req, res) { // Do other things } 现在,如果在SomeFunction我要说next(req, res); 它似乎没有工作。 它永远不会去的方法。 显然我不能直接传递参数…但是我的问题是为什么? 下一个函数如何知道使用哪个参数? 是因为它们被命名为相同还是自动传递第一个和第二个参数? 如果NextFunction使用blah, bleet而不是req, res会继续工作吗?

分组和pipe理node.js中间件

如果我已经制作了一些可以一起工作的中间件,那么分组和pipe理function的最佳约定是什么? 在我的server.js文件中,我目前刚刚通过app.use调用了一个又一个的app.use 。 但是,我发现,如果我的第一个数据没有产生任何数据,组中的后续数据就可以跳过了。 我想这最终是一个聚合,虽然我没有看到在其他项目中的任何例子。

在Express中使用vhost中间件指定按子域的路由

我正在使用vhost快速/连接中间件,我有点困惑,应该如何使用。 我想要一组路由适用于具有子域名的主机,另一组则适用于没有子域名的主机。 在我的app.js文件中,我有 var app = express.createServer(); app.use…(middlware)… app.use(express.vhost('*.host', require('./domain_routing')("yes"))); app.use(express.vhost('host', require('./domain_routing')("no"))); app.use…(middlware)… app.listen(8000); 然后在domain_routing.js : module.exports = function(subdomain){ var app = express.createServer(); require('./routes')(app, subdomain); return app; } 然后在routes.js我打算运行路线集,取决于是否传入的子域variables是"yes"或"no" 。 我在正确的轨道上,还是这不是你如何使用这个中间件? 我有点困惑,有两个app服务器实例被创build的事实(因为这是网上的例子似乎做的事情)。 我是否应该传递原始app服务器实例,并使用它来代替创build一个单独的子域路由器?

如何传递一个额外的参数passport.authenticate

(我已经做了fbStrategy.passReqToCallback = true )我fbStrategy.passReqToCallback = true https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together,但想要使用这个社交authentication服务的多个应用程序,前:控制加热系统,打开喷头等 基本上,如果这些应用程序之一检查服务器,并没有一个正确的令牌,它会被redirect到这个社会authentication服务(社会authentication)。 当用户按下社交loginbutton时,它抓取它到达的应用程序的参数,并将其添加为/auth/facebook/:appid // send to facebook to do the authentication app.get('/auth/facebook/:appId', function(req,res,next){ passport.authenticate( 'facebook', { scope : 'email' } )(req,res,next); }); req req,res,next是序列化的用户logging。 此时social-auth不知道用户是谁。 fbStrategy.passReqToCallback = true; passport.use(new FacebookStrategy(fbStrategy, function(req, token, refreshToken, profile, done) { var email = (profile.emails[0].value || '').toLowerCase() process.nextTick(function() {… 一旦授权完成,我想重新回到调用应用程序,我需要:appId参数骑,所以我可以回到正确的网站。 现在一般情况下,如果我只是把一个像currentAppId这样的variables用于各种社会状态,那么它就可以工作,但是如果你碰巧有多个人在同一时间进行身份validation,那么你可以想象有一个用户返回到错误的应用程序或其他用户的应用程序。 这就是为什么我需要appId作为参数passport.authenticate 。 我应该在哪里找出如何。 […]

在Node.js / Express中连接中间件

以下是一个Node.js / Express Web服务器的简单示例: var express = require('express'); var app = express(); app.get('/*', function(req, res){ res.end('Hello, you requested ' + req.url + '.'); }); app.listen(3000); 运行时,请求http://localhost:3000/Hello-world将生成响应 Hello, you requested /Hello-world. 为了学习中间件,我想重新实现这个服务器,但是使用中间件来获取包含在单独函数中的“获取数据”,“处理数据”和“输出数据”。 我试图跟随,但是对于这个代码,一个请求http://localhost:3000/Hello-world没有给出任何回应。 只有app.get(..)代码似乎执行。 var express = require('express'); var app = express(); // Step 1: get input app.get('/*', function(req, res){ req['testing'] = req.url; }); // Step […]

两个快速“应用程序在一个NodeJS服务器?

我希望能够通过不同的Express中间件堆栈传递不同的请求。 我想我需要两个快速的app ,并以某种方式分支。 例如: var app = express(); var alt_app = express(); app.use(logger('dev')); app.use(bodyParser.json()); app.use(function(req, res, next) { if (some_condition(req)) { divert_request_to_alt_app(); } else { next(); } } app.use(middleware_that_must_not_affect_alt_app()); alt_app.use(middleware_that_only_affects_alt_app()); 这样的战略是可能的吗? 如果是这样, divert_request_to_alt_app()应该是什么? 如果不是,还有其他的方法吗?