Tag: 中间件

cookie不会在第一次请求时发送

我在我的server.js express应用程序上有下面的代码: var express = require('express'); var fallback = require('express-history-api-fallback'); var compress = require('compression'); var favicon = require('serve-favicon'); var prerenderio = require('prerender-node'); var config = require('getconfig'); var app = express(); app.use(function (req, res, next) { if (config.environment !== 'local') { res.cookie('config', JSON.stringify(config), { secure: true }); } else { res.cookie('config', JSON.stringify(config)); } next(); }); app.get('/versioncheck', […]

在Express.js中间件中审计

我正在寻找通用的方式来审计我为某些API编写的快速中间件。 我已经想出了几种做法,但对我来说似乎没有什么效率。 现在我只想login到控制台或日志文件,但后来我会看数据存储。 我可以很容易地在API路由中使用“日志”库(如bunyan)来执行此操作。 但是这意味着我必须在任何我想要审计的地方调用日志loggingfunction。 使用片段中给出的中央function来执行日志logging。 这是loggingAPI请求/响应的好方法,但对审计关键信息(如从用户注册审计用户标识)没有帮助。 或者在用户login时审核电子邮件地址。 function auditUserAction(apiFunction) { function jsonWrapper(funcToWrap, userAction) { return function() { userAction.jsonResponse = arguments[0]; return funcToWrap.apply(this, arguments); } } return function() { req = arguments[0]; res = arguments[1]; // Overriding json method so we can capture the json response res.json = jsonWrapper(res.json, userAction); userAction.url = req.url; userAction.userId = […]

如何在SailsJS中使用快递中间件?

我想在SailsJS应用程序中使用一个ExpressJS中间件。 它是使用IP地址对api进行速率限制的“express-limiter”模块(它是一个快速中间件)。 正常情况下,我们做: app.use(limiter({ some parameters })) 如何在SailsJS应用程序中使用此中间件或任何其他快速中间件? 感谢你的帮助。

与express()一起使用中间件。与express.static一起使用

我使用PassportJS来保护WebApp(用AngularJS编写)。 我使用Express(4.0.0)的NodeJS在login屏幕后提供静态内容。 我不知道如何同时使用中间件和express.static() 。 我的(不工作)代码看起来像 app.use('/secure', function (req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); }, express.static(__dirname + '/../../client')); 中间件确保的计划是,只有当用户login时,用户才会被发送到WebApp。否则,他/她将被redirect到根文件夹。 我find了这个答案 ,但根据文档 ,新版本支持多种function。 这不是我正在寻找的“干净”的解决scheme,因为目录包含太多的子文件夹和文件。 提前致谢

Sails.js路由redirect与自定义策略

我想要达到的情况: 请求/注册运行AuthController.register 请求/ Facebook运行AuthController.register,但之前应用了Facebook政策。 我制定了一项政策 /api/policies/facebook.js 喜欢这个 var graph = require('fbgraph'); module.exports = function(req, res, next) { facebook_token = req.query.facebook_token; if(!facebook_token){ res.send('401',{error:"Missing facebook token"}); } graph.setAccessToken(facebook_token); graph.get("me",function(err,graph_res){ if(err){ res.send('401',{error:"Facebook authentication error"}); return; } else{ next(); } }); }; 在中设置政策 /config/policies.js 喜欢这个 module.exports.policies = { 'auth': { 'facebook': ['facebook'] } } 我这样设置我的路线 module.exports.routes = { 'post […]

Express JS:如何知道请求是否为静态资产?

我正在为一些特定的任务编写中间件,当请求的是静态资源时(从客户端文件夹:app.use(express.static(path.join(__ dirname,“../client”))); 那么我怎么能知道这个特定的请求是针对静态资源还是从“客户端”文件夹提供? 我有下面的代码 app.use(express.static(path.join(__dirname, "../client"))); app.use(someCustomMiddleware()); 我看到,像CSS / JS文件静态资产的请求仍然通过someCustomMiddleware()。 我的要求是someCustomMiddleware()不应该处理对静态资产的请求。

使用Express.Router()快速路由特定的中间件

我使用express路由器来定义我的路由,我需要添加一个中间件,所以有些路由,只是在callback函数之前添加中间件输出以下错误: Error: Route.post() requires callback functions but got a [object Object] 我正在使用文件夹作为模块,我的模块上传,这里是index.js : module.exports = (function () { var express = require( 'express' ), router = express.Router(), multer = require( 'multer' ), transaction_docs = multer( { dest: './client/public/docs/transactions/' } ), product_images = multer( { dest: './client/public/img/products' } ), upload = require( './upload' ); router.route( '/upload/transaction-docs' […]

表示中间件受保护和不受保护的路由

我有一些/users下的路线,我想要求一个身份validation令牌和一些我不。 为了做到这一点,我做了以下。 var protected = express.Router(); var unprotected = express.Router(); unprotected.post('/', function(req, res, next) { // A // no auth required next(); }); protected.get('/', function(req, res, next) { // B // auth required next(); }); module.exports = { protected: protected, unprotected: unprotected }; 然后我用下面的方法安装这些路线。 var users = require('./routes/users'); app.use('/users', unprotected_middleware, users.unprotected); // C app.use('/users', protected_middleware, […]

在路由器中调用中间件function

我正在使用Mozilla的客户端会话在我的express.js应用程序上实施会话,我需要一些帮助。 我在我的router.js和app.js中的中间件中有我的post和gest请求,运行时出现这个错误: ReferenceError:requireLogin没有被定义 //index.js(路由器) var express = require('express') , router = express.Router() , user = require('../public/js/models/test.js'); router.get('/profile-header', requireLogin, function (req, res, html) { console.log(req.session); res.render('templates/profile-header.jade', { title: 'Default' }) }); router.get('/sign-in', function (req, res, html) { res.render('templates/sign-in.jade', { title: 'Sign In' }) }); router.get('/blog-home', requireLogin, function (req, res, html) { res.render('templates/blog-home.jade', { title: 'Blog' }) […]

NodeJS / Express:隐式地将自定义中间件的数据推送到渲染调用

我正在使用NodeJS / Express3。 我有一些自定义中间件,它根据cookie和URL从数据库中检索一些数据。 我想要访问基本模板中的这些数据(用于所有页面)。 我可以通过将数据附加到req ,然后使用res.render('template', {foo: req.foo, …page specific data…});来显式执行此操作res.render('template', {foo: req.foo, …page specific data…}); 我想使这隐含,所以当我添加(或删除)自定义中间件我不必改变每个渲染调用。 有没有一种方法可以使自定义中间件的数据可以呈现而不必将其添加到req中,并将其显式传递给每个呈现请求。 我正在使用LinkedIn的dust.js模板版本,但我认为问题是模板引擎不可知论者。