0

我无法token使用 xhr 代理supertestpostman. 在我注册我的用户之后。

我正在尝试从正文中获取 jwt,以便我可以发出经过身份验证的请求,但由于某种原因,我不断收到“未找到”。

请看我的代码..

报名路线

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

路由最重要/signup的是,如果我在signUp可以访问ctx.response.body传递的中间件之后添加一个中间件,signUp但我不能发布它。或者我不知道怎么做

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.logs在下ctx.response.body一个中间件中也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)

仅在测试中,但使用邮递员工作正常。有什么我做的不对吗?

我正在使用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,导致该函数返回一个立即解决的承诺。

于 2017-01-11T05:50:43.470 回答