2017-01-10 14 views
0

Я не вернулся мой token на самом деле извлечь из моих XHR, используя промежуточные программные агенты supertest говорят и postman. после того, как я зарегистрирую своего пользователя.koa.js возвращающийся 404 «Not Found» после регистрации, вместо маркеров из ctx.body

Я пытаюсь получить jwt из тела, поэтому я могу сделать аутентифицированные запросы, но по какой-то причине я продолжаю получать «Not Found».

Пожалуйста, обратите внимание на мой код ..

регистрацию маршрута

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 показывает сгенерированный токен.

I тест/регистрация с этим кодом:

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.

Пожалуйста, помогите! Спасибо.

ответ

1

Печально, я не выполнял его в «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, в результате чего функция вернула мгновенное решение.