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 代理 说 supertest
和 postman
从我的中间件中检索到的。 在我注册我的用户之后。
我正在尝试从正文中获取 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.body
的 console.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.0
、supertest: 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 立即解决承诺。
我无法 return 我的 token
实际上是使用 xhr 代理 说 supertest
和 postman
从我的中间件中检索到的。 在我注册我的用户之后。
我正在尝试从正文中获取 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.body
的 console.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.0
、supertest: 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 立即解决承诺。