koa.js在注册后返回404“Not Found”,而不是来自ctx.body的令牌

时间:2017-01-10 12:21:11

标签: javascript node.js koa supertest koa2

在我注册用户后,我无法使用xhr代理tokensupertest 返回我的postman实际从我的中间件中检索到的router.post('/signup', signUp);

我正在尝试从身体获取jwt,以便我可以进行身份​​验证请求,但由于某种原因,我继续“未找到”。

请看一下我的代码..

注册路线

/signup

signUp路由的重要之处在于,如果我在ctx.response.body后添加中间件,我可以访问从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 };,但我无法发布它。 或者我不知道如何

signUp中间件

console.logs

我应该提一下,这样就保存了数据,当我在数据库中检查数据时,ctx.response.body的{​​{1}}在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.0supertest: 2.0.1和路由koa-rest-router: 1.0.0

请帮忙! 感谢。

1 个答案:

答案 0 :(得分: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()

我没有在userInst.save之前等待,导致函数返回即时解决的承诺。