大佬教程收集整理的这篇文章主要介绍了如何在node.js上进行一些认证后避免请求流丢失的数据?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当尝试将音频,mpeg或其他二进制文件上载到服务器的客户端时,该请求应该是服务器上的可读流.我们可以使用request.pipe()管道进入另一个流,例如从请求中获取文件,然后使用knox将文件上传到amazon s3.
当我使用异步身份验证方法时,部分流数据丢失,并且长度与传输的内容长度标头不再匹配.有什么方法可以避免这种行为吗?
请求流的数据是仅存储在内存中还是node.js将数据存储在某个本地临时文件夹中?
var express = require('express'),app = express(),passport = require('passport'),BasicStrategy = require('passport-http').basicStrategy; var users = [ { id: 1,username: 'bob',password: 'secret',email: 'bob@example.com' },{ id: 2,username: 'joe',password: 'birthday',email: 'joe@example.com' } ]; function findByUsername(username,fn) { for (var i = 0,len = users.length; i < len; i++) { var user = users[i]; if (user.username === userName) { return fn(null,user); } } return fn(null,null); } passport.use(new BasicStrategy( function(username,password,donE) { process.nextTick(function () { findByUsername(username,function(err,user) { if (err) { return done(err); } if (!user) { return done(null,falsE); } if (user.password != password) { return done(null,falsE); } return done(null,user); }) }); })); app.configure(function() { app.use(express.logger()); app.use(passport.initialize()); app.use(app.router); }); app.post('/upload',passport.authenticate('basic',{ session: false }),function(req,res,next) { var dataLength = 0; req.on('data',function(chunk) { console.log('loading'); dataLength += chunk.length; }).on('end',function() { console.log('load end'); console.log('contentLength: %s',req.headers['content-length']); console.log('dataLength: : %s',dataLength); res.send(200); }); }); app.listen(8080,function() { console.log('server is running'); });
>是的,请求是一个ReadStream,它会像你说的那样发出数据事件.
>流中的第一个数据块存储在内存中,没有临时文件.
您遇到的一般问题是,您需要捕获从req发出的数据,并在身份验证完成后重新发出它. Connect为您提供帮助.看起来护照-hns目前没有使用它们.
如果您安装了pause模块,它可以为您处理.
尝试这样的事情:
var pause = require('pause'); // Create our own middleware constructor. var bufferedAuthenticate = function(){ // Set up standard authenticate handler passing arguments through. var authMiddleware = passport.authenticate.apply(passport,arguments); // Pass our own middleware instead that wraps passport-http. return function(req,next){ // Pause the request before authenticaTing. var obj = pause(req); authMiddleware(req,function(err){ next(err); // Emit any cached data events that fired while authenticaTing. obj.resume(); }); }; }; app.post('/upload',bufferedAuthenticate('basic',next) { var dataLength = 0; req.on('data',dataLength); res.send(200); }); } );
以上是大佬教程为你收集整理的如何在node.js上进行一些认证后避免请求流丢失的数据?全部内容,希望文章能够帮你解决如何在node.js上进行一些认证后避免请求流丢失的数据?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。