0

xhr エージェントsay andtokenを使用してミドルウェアから実際に取得するためにmy を返すことができませんユーザーをサインアップした後。supertestpostman

認証されたリクエストを作成できるように、ボディから jwt を取得しようとしていますが、何らかの理由で「見つかりません」というメッセージが表示され続けます。

私のコードを見てください..

サインアップルート

router.post('/signup', signUp);    

/signupルートについて重要なことは、渡されたミドルウェアsignUpにアクセスできるようになった後にミドルウェアを追加する場合ですが、それを公開することはできません。または、方法がわかりませんctx.response.bodysignUp

およびsignUp ミドルウェア

const signUp = async (ctx, next) => {
    
    const bodyInfo = await ctx.request.body;

    if(!bodyInfo.username || !bodyInfo.password) {
        ctx.status = 402;
        ctx.body = "Error, username and password must be provided!";
    }

    const userInst = new User(bodyInfo);

    userInst.save(async(err, user) => {
        
        if(err) { return next(err); }

        const token = tokenForUser(user);

        ctx.body = token;

        return next();
    });
};

export { signUp, signIn };

これによりデータが正常に保存されたことに言及する必要があります。データベースをチェックインするとconsole.logsctx.response.body次のミドルウェアsignUpで生成されたトークンも表示されます。

/signupを次のコードでテストします。

beforeEach(async () => {
    a_user = { "username": "testing",
           "password": 'newpassword',
           "age": 22, "height": 179 
    };
    await User.remove({});
})

afterEach(async () => await User.remove({}));

it('signs up', async () => {
    await request(inst)
        .post('/api/v1/signup')
        .send(a_user)
        .expect(200);
});

私のエラーの完全なスタック トレースは次のとおりです。

  1) Authentication signs up:
 Error: expected 200 "OK", got 404 "Not Found"
  at Test._assertStatus (node_modules/supertest/lib/test.js:266:12)
  at Test._assertFunction (node_modules/supertest/lib/test.js:281:11)
  at Test.assert (node_modules/supertest/lib/test.js:171:18)
  at assert (node_modules/supertest/lib/test.js:131:12)
  at node_modules/supertest/lib/test.js:128:5
  at Test.Request.callback (node_modules/superagent/lib/node/index.js:631:3)
  at IncomingMessage.<anonymous> (node_modules/superagent/lib/node/index.js:795:18)
  at endReadableNT (_stream_readable.js:974:12)
  at _combinedTickCallback (internal/process/next_tick.js:74:11)
  at process._tickCallback (internal/process/next_tick.js:98:9)

テストのみですが、postman を使用すると問題なく動作します。私が正しくやっていないことがありますか?

を使用してkoa: 2.0.0おりsupertest: 2.0.1、ルートにkoa-rest-router: 1.0.0.

助けてください!ありがとう。

4

1 に答える 1

1

悲しいことに、「非同期/待機方法」では実行しませんでした。

これ

userInst.save(async(err, user) => {
        
        if(err) { return next(err); }

        const token = tokenForUser(user);

        ctx.body = token;

        return next();
    });

しなければならなかった

これ

const user = await userInst.save();
const token = tokenForUser(user);

ctx.body = token;

return next()

の前に await を配置しなかったためuserInst.save、関数は即座に解決される promise を返しました。

于 2017-01-11T05:50:43.470 に答える