Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在node.js上进行一些认证后避免请求流丢失的数据?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
请求流如何与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,请注明来意。