Articles of 中间件

如何在单独的路由中捕获响应错误/消息?

我只是想捕获中间件函数的响应错误,如果我写代码如下所示: var express = require('express'); var expressValidator = require('express-validator'); var app = express(); var bodyParser = require('body-parser'); var router = require('./routes'); //monk.mongoList(); app.use(bodyParser.urlencoded({extented:true})); app.use(bodyParser.json()); app.use(expressValidator([])); var port = process.env.PORT || 8978; router.get('/',function(req,res,next) { var error = Error('Article is not found'); next(error.message); return res.send("Hello World!"); }); app.use(function(err,req,res,next) { console.log(err + "TET"); }) app.listen(port); 但是我想分开下面的代码: app.use(function(err,req,res,next) { […]

在koa中间件中使用ctx

我有一个我正在使用的koa中间件: .use(signS3()) 我现在想要做的是使用来自ko​​a的ctx对象来自signS3()的configuration对象。 我想要做这样的事情: .use((ctx, next) => signS3({ keyPrefix: ctx.host })(ctx, next)) 但是这不起作用。 我想我的语法错了,将不胜感激任何投入如何做到这一点。

如何访问passport.deserializeUser中的node-orm2 Express中间件

我使用Passport进行身份validation,并与node-orm2一起使用。 护照要求您注册函数以序列化和反序列化会话中的用户。 我的用户存储在我通过node-orm2的Express中间件访问的数据库中。 orm2中间件将其模型标记在req对象上以便于访问。 不幸的是,Passport不提供对deserializeUser中的req对象的访问。 我已经遇到了这个解决scheme ,但我希望有更好的东西: var User; passport.use({ passReqToCallback: true }, new LocalStrategy(function (request, username, password, done) { if (!User) { User = request.models.User; } User .find({ username: username }) .limit(1) .run(function (err, users) { var user = users[0]; if (err) { done(err); } else if (!hasher.verify(password, user.password)) { done(null, false); } else […]

如何使用browserify使用非commonjs库?

我想使用OpenLayers与Borowserify中间件,这里是我的代码文件app.js , main.js和index.html 我能够正确地显示地图,但有关正确使用browserify-middleware的问题很less 当在浏览器中下载时,main.js文件大小是原始文件(main.js + OpenLayers.js)的两倍,因此加载时间太长。 为什么文件大小是双倍的? 文件末尾有一些编码文本。 如何将非commonjs库定义为外部? 我遵循这里的指示,但无法实现。 我在OpenLayers.js的最后添加了{module.exports = OpenLayers}

运行数千个NodeJS应用程序

我想开始写许多基于NodeJS的小应用程序,比如streamfilter,发生器等等,每个应用程序可能是30-40LOC。 每个CPU消耗的CPU,RAM或带宽几乎为零(当NodeJS和OS进程的开销被分解出来的时候)。 重点是,我想要一个简单的方法来运行数千个。 我需要什么? 有没有可以以合理的价格($ 10 /月)运行数千个NodeJS应用程序的PaaS? 是否有某种中间件可以在一个Node进程之上为我提供数千个沙箱“分区”? 还是有一些二进制,这是我可以把VPS?

什么是Node.js连接会话()参数中的安全选项

我正在通过以下Connect示例工作: var connect = require ('connect'); var timeout = 30000; // session timeout: 30 seconds var sessionOpts = { secret: 'keyboard cat', key: 'myapp_sid', cookie: { maxAge: timeout, secure: true} /*Example doesn't work with secure?*/ }; var app = connect () .use (connect.favicon()) .use (connect.cookieParser ('keyboard cat')) .use (connect.session(sessionOpts)) .use (function (req, res, next) { […]

传递参数来表示路由中的中间件

我正在构build一个nodejs + express RESTful服务器,并试图利用中间件来简化特定操作的授权。 我想实现的是将parameter passing给我的授权中间件function。 我想知道在路由中是否完全可以做到这一点,或者如果我必须提取中间件function中的参数。 我希望避免这种行为,因为我已经*哼*不完全一致的我的url参数名称。 我想要做的是这样的: router.get( '/:productId', auth.can_get_this_product(productId), // Pass the productId here controller.perform_action_that_requires_authorization ); 但这是不可能的。 因为我有其他路线的参数名称可能不相同(即: router.get(/:p_id, auth.can_get_thi… )。我意识到我应该回去,并确保我的参数名称是一致无处不在,并使用req.param('productId')检索中间件中的参数,但我很好奇它是否可能。

解密.update上的encryption错误

我正在为Node项目编写一个JavaScript模块。 我得到一个非常模糊的错误 protocol\Parser.js:82 throw err; TypeError: error:0000000:lib(0):func(0):reason(0) at Decipher.Cipher.update (crypto.js:279:27) 以下是我的javalogin.js文件。 错误似乎发生在decipher.update(rows[i].CC, 'hex', 'utf8'); 线。 我有一些控制台打印出来。 console.log('DB UserName:', rows[i].UserName); //returns correct username console.log('DB CC: ', rows[i].CC); //returns 2bf9kdk02kdnf3dk (correct CC hash on db) JavaLogin.js: var mysql = require('mysql'); var crypto = require('crypto'); var sha = require('sha1'); var algorithm = 'aes256'; // or any other algorithm […]

快递 – 如何修改请求,然后redirect到另一个路线?

我正在寻找一种方法来修改我的请求之前redirect到我的express.js应用程序中的另一个路线。 我尝试了两种方法来做到这一点: 1) #users.coffee router.use '/:id', (req, res, next) -> req.currentUser = req.params.id req.url = '/' next() #app.coffee app.use '/users', require('./routes/users') app.get '/', (req, res) -> locals = {} if req.currentUser locals.currentUser = req.currentUser res.render 'index', locals 2) #users.coffee router.use '/:id', (req, res, next) -> req.currentUser = req.params.id res.redirect '/' #app.coffee app.use '/users', require('./routes/users') app.get […]

处理快递中间件模块中的错误

我正在创build一个模块,这是一个快速的中间件。 我的问题是,当遇到某种错误(例如,一个看到用户无权访问此内容的acl模块)时,最好的做法是,调用next()时出现错误,所以使用模块可以按照它select的方式来处理,或者我可以发送一个响应而不是接下来的调用?