3

koa を介してログイン フォームの動作を複製しようとしています。

ログインフォームは次のことを行います。

<form id="loginForm" method="post" action="http://myaddress:3000/auth" enctype="multipart/form-data">

私はkoa requestform-dataモジュールを使用しています:

var form = new FormData();
form.append('identification', 'userId');
form.append('password', 'userPassword');

var options = {
    url:            DB_SERVER_URL + 'auth',
    method:         'POST',
    formData:       form
};

var response = yield request(options);
console.log('response.statusCode: ' + response.statusCode);

しかし、私は常に400の応答を受け取ります。

which worksを使用してみましform.submit(DB_SERVER_URL + 'auth', function(err, res) { ... }たが、koa の yield 機能が好きで、理想的にはコールバックを処理する必要がないようにしたいと考えています。

何か案は?

4

3 に答える 3

0

koa-request を使用している場合は、これを行うことができました。

const request = require('koa-request');

const response = yield request({
 method: 'POST',
    url: 'https://whatsever.com',
    form: {
     itema: 'vala',
     itemb: 'valb',
    },
    headers: {
      'Content-type': 'application/x-www-form-urlencoded'
    }
  });

this.body = response.body;

マルチパートが必要な場合は、https ://www.npmjs.com/package/request#multipartform-data-multipart-form-uploads をご覧ください。

モジュールをkoa-requestラップすることを覚えておいてくださいrequest

于 2016-04-08T08:23:11.103 に答える
0

を使用することになりましform.submit(DB_SERVER_URL + 'auth', function(err, res) { ... }たが、コールバックをラップしyieldて、同期制御フローを維持するために使用できるようにしました。

form.submit応答を受信するためのコールバックのラッパーは次のとおりです。

function makeLoginRequest(formData) {

    var form = new FormData();
    form.append('identification', formData.identification);
    form.append('password', formData.password);
    var DB_SERVER_URL = 'http://myurl:3000/';

    return function(callback) {
        form.submit(DB_SERVER_URL + 'auth', function(error, response) {
            callback(error, response);
        });
    }
}

そして、応答本文を受信するためのコールバックのラッパーは次のとおりです。

function getLoginResponseData(response) {

    return function(callback) {
        response.on("data", function(chunk) {
            callback(null, chunk);
        }); 
    }
}

yieldこれにより、同期制御フローを維持できます。

var response = yield makeLoginRequest(this.request.body);
console.log('response.statusCode: ' + response.statusCode);

var chunk = yield getLoginResponseData(response);
console.log("BODY: " + chunk);

私はノードとコアの初心者なので、より良い方法があれば教えてください!

于 2014-10-07T22:03:32.153 に答える