일부 코드를 테스트하기 위해 Lab을 사용하려고합니다. 그러나 어떤 이유로 올바른 페이로드를 넣을 때 코드가 아무 것도하지 않습니다. 거기에 더 페이로드 없거나 그것이 내가 응답 얻을 다음을 내 조이 검증과 일치하지 않도록hapijs가있는 server.inject가 올바른 응답을 반환하지 않습니다.
'use strict';
const Server = require('../server');
const options = {
method: 'POST',
url: '/api/users',
payload: JSON.stringify({ mobile: '3342329224' })
};
Server.inject(options, (response) => {
if (response) {
console.log(response.payload);
}
else {
console.log('Nada');
}
});
내가 코드를 편집하는 경우 :
{"statusCode":400,"error":"Bad Request","message":"child \"mobile\" fails because [\"mobile\" must be larger than or equal to 10]","validation":{"source":"payload","keys":["mobile"]}}
module.exports = {
method: 'POST',
path: '/api/users',
config: {
auth: false,
handler: (request, reply) => {
//looks up payload in db otherwise creates entry
User.findOne({
mobile: request.payload.mobile
}, (err, user) => {
if (err) {
throw err;
}
if (user) {
// uses twillio to send code
sendVerificationText(user, (err, result) => {
if (err){
throw err;
}
if (result === true) {
// this is what I expect to happen when testing
reply('code sent').code(201);
}
else {
throw Boom.badRequest(err);
}
});
}
else {
// the user should exist so....
const user = new User();
user.mobile = request.payload.mobile;
user.admin = false;
user.save((err, user) => {
if (err) {
throw Boom.badRequest(err);
}
sendVerificationText(user, (err, result) => {
if (err){
throw err;
}
if (result === true) {
reply('code sent').code(201);
}
else {
throw Boom.badRequest(err);
}
});
});
}
});
},
// Validate the payload against the Joi schema
validate: {
payload: createUserSchema
}
}
};
을 약속 반환받을하지 않는 것 이 코드는 서버를 실행하고 수동으로 API를 테스트 할 때 작동한다고 언급해야합니다. 나는 그것을 이해할 수 없다.
크롬 개발자 도구를 사용하여 검사 할 것을 제안합니다. 서버에 보내는 실제 요청을 수동으로 테스트하는 데 사용하는 요청과 비교하십시오. 요청이 생성 될 때 약간 다른 것으로 보입니다. –
나는 hapijs에 익숙하지 않다. 하지만 내 첫 번째 추측은 설명서를 읽는 것으로, 아마도 서버 코드는 다음과 같아야합니다. request.모바일 대신 request.payload.mobile? 그냥 내가 벗어날 수있을 것 같아. –
나는 벗어났다. 나는 약간의 연구를했고 유사한 프로젝트를 만들려고 노력했다. 조이 유효성 검사가 중단되는 문제를 발견했습니다. 그 발견에 대한 대답 게시. –