2

Express.js で http 基本認証を使用する nodejs アプリがあります。

このアプリでは、外部 Web ページに対して http.get 要求を行い、html を読み込んで解析します。

基本認証を使用するhttp.get(url, function(){})と、外部ホストへの各リクエストでエラーが発生します:「許可されていません」。基本認証を削除すると、正常に機能します。

自分のサーバーだけがこの認証を持っているのに、なぜ私が公開リソースで無許可なのか知っている人はいますか?

例 (疑似コード):

Express Basic 認証を使用すると、google.com から本文として「Unauthorized」が表示されます。認証なしで、htmlを取得します

    var auth = express.basicAuth(function(user, pass, callback) {
                var result = (user === 'john' && pass === 'doe') ? true : false;
                callback(null, result);
            });

            app.configure(function(){
                app.use("/", auth, function(next) { next(); });
                app.use("/", express.static(__dirname+'/html'));
            });

http.get('http://google.com', function(res) {

                res.setEncoding('utf8');
                var body = '';

                res.on('data', function (chunk) {
                    body = body + chunk;
                });

                res.on('end', function() {
                    cb(body);
                });

            }).on('error', function(err) {
                cb('error', err);
            }); 
4

2 に答える 2

4

サーバーに GET が発行された後、Google への呼び出しがコールバック内で行われるようにアプリを再構築する必要があります。作業コードは次のとおりです。

var express = require('express');
var request = require('request');
var app = express();

// Authenticator
app.use(express.basicAuth('john', 'doe'));

app.get('/', function(req, res) {
    request.get('http://www.google.com', function (err, response, body) {
        res.send(body)
    });
});

app.listen(process.env.PORT || 8080);

より高度な基本認証を行いたい場合の詳細は次のとおりです: http://blog.modulus.io/nodejs-and-express-basic-authentication

コードを同期的に記述しようとしているようですが、うまくいきません。慣用的なノードのレビューについては、この記事を読むことをお勧めします: http://blog.ponyfoo.com/2013/07/12/teach-yourself-nodejs-in-10-steps

于 2013-07-23T04:10:39.607 に答える