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

koa.js returning 404 "Not Found" after signup, instead of the token from ctx.body

我无法 return 我的 token 实际上是使用 xhr 代理 supertestpostman 从我的中间件中检索到的。 在我注册我的用户之后。

我正在尝试从正文中获取 jwt,以便我可以发出经过身份验证的请求,但由于某种原因,我一直在获取 "Not Found"。

请看看我的代码..

报名途径

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

/signup 路由的重要之处在于,如果我在 signUp 之后添加一个中间件,我可以访问从 signUp 中间件传递的 ctx.response.body 但我无法发布不管怎样。 或者我不知道如何

注册中间件

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 的下一个中间件中 ctx.response.bodyconsole.logs 显示生成的令牌也是。

测试/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

请帮忙! 谢谢。

遗憾,我没有在"The async/awaits way"中表演。

这个

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 之前放置等待,导致函数 return 立即解决承诺。