2017-12-05 22 views
0

요청 확인에서 HTTP method.getmethod.delete이 누락되도록 허용하려고 시도했습니다. 그러나 그것은 실패하고 있습니다. .get.delete 또는 통과하는 것을 허용하지 기대증기 2 OR 조건부가 요청 유형 검사에서 작동하지 않습니다.

func respond(to request: Request, chainingTo next: Responder) throws -> Response { 
    if request.method != .get || request.method != .delete { 
     guard let contentType = request.headers["Content-Type"], contentType == "application/json" else { 
        return try Response(status: .badRequest, json: JSON(node: ["reason": "Invalid data"]))     
     } 
    } 
    return try next.respond(to: request) 
} 

.

.get 또는 .deleteinvalid data으로 표시되면 현재 결과가 유효하지 않게됩니다. 그것은 마치 ... 연산자가 무시되고 왜 그럴 수 없는지 알 수 없습니다.

+2

나는 당신이 && 대신에 &&를 의미한다고 생각합니다. – meggar

답변

0

AND (&&) 연산자를 사용해야합니다. 코드가 현재 작성하는 방식으로, 그것은 따라서 다음과

  • GET 요청은 클라이언트에서 오는 respond 방법에 들어간다.
  • 우리는 if- 문을 사용합니다.
  • 요청 방법이 .get과 같지 않은지 확인하십시오. 그것 동일하므로, 우리는 다음 사건으로 이동합니다.
  • 요청 방법이 .delete과 같지 않은지 확인하십시오. 과 같지 않으므로 명령문이 성공합니다.
  • 코드를 if- 문구로 실행합니다.

중 문이 false 인 경우 모두 문이 거짓 경우 || 조작이 실패하는 반면, 실패합니다 && 연산자를 사용.

if request.method != .get && request.method != .delete { 
    guard let contentType = request.headers["Content-Type"], contentType == "application/json" else { 
     return try Response(status: .badRequest, json: JSON(node: ["reason": "Invalid data"]))     
    } 
} 

참고 : 당신은 .get 후 쉼표가 필요하지 않습니다. 나는 솔직히 그것이 무엇을하는지, 심지어 차이를 만들어 내는지 모른다.