2016-07-11 11 views
0

평균 스택을 사용하고 있으며 내 Nodejs 서버 끝점에 동적으로 쿼리 매개 변수를 보내고 있습니다. 내 클라이언트 제어기 :의미 Nodejs JSON.parse 클라이언트에서 서버로 데이터 전달

쿼리 컨트롤러에 주입 한 값이다
$http.get('/api/things',{params:{query:query}}).then(response => { 
     this.awesomeThings = response.data; 
     socket.syncUpdates('thing', this.awesomeThings); 
    }); 

. 이 (작동) 서버 컨트롤러 기능입니다 : 위의 작품

export function index(req, res) { 
    var query = req.query.query && JSON.parse(req.query.query) 
    Thing.find(query).sort({_id:-1}).limit(20).execAsync() 
    .then(respondWithResult(res)) 
    .catch(handleError(res)); 
} 

하지만 난이 한 번도 본 적이없는 것처럼 라인

var query = req.query.query && JSON.parse(req.query.query) 

을 이해하려고 노력하고 (그리고 난 몰라 프로그래밍 배경에서 온). 나는 console.logged 쿼리를 사용하여 객체 (Mongodb에서 필요함)를 이해하지만, 최종 출력을 찾기 위해 console.logged (JSON.parse (req.query.query)) 또는 JSON.parse (query)를 호출하면 프로그램이 오류 메시지없이 작동을 멈춘다. 매우 이상하다. 누군가 위의 구문을 설명 할 수 있고 작동을 위해이 방법을 수행해야하는 이유가 있다면 큰 도움이된다. 추신 : JSON

export function index(req, res) { 
    var query = req.query.query && JSON.parse(req.query.query) 
    var que = JSON.parse(req.query.query) 
    Thing.find(query).sort({_id:-1}).limit(20).execAsync() 
    .then(respondWithResult(res)) 
    .catch(handleError(res)); 
    console.log("que"+que) 
} 
+0

가능한 복제 [이중 앰퍼샌드와 과제 "&&"] (http://stackoverflow.com/questions/12878612/assignment-with-double-ampersand) – DAXaholic

+0

이것이 유일한 코드입니다. 그렇게 코딩하지 않으면 작동하지 않습니다. 위의 코드는 실제 작업 코드에서 가져온 것입니다. 그 구문의 의미와 작동 원리에 대해 묻고 있습니다. –

답변

1

function one() { 
 
    var x = {}; 
 
    var res = JSON.parse(x.y); 
 
    console.log(res); 
 
} 
 

 
function two() { 
 
    var x = {}; 
 
    var res = x.y && JSON.parse(x.y); 
 
    console.log(res); 
 
}
<button onclick="one()">ERROR</button> 
 
<button onclick="two()">NO ERROR</button>

:과 같이 .parse, 그것은 아무런 영향을 미치지는 않지만, 심지어로드 할 수 없습니다
var x = data && JSON.parse(data); 

왼쪽부터 표현식을 평가하므로 첫 번째 데이터가 추출됩니다.

정의되지 않은 경우 다음 부분 ->JSON.parse()이 수행되지 않습니다. 반면에 데이터가 정의되면 구문 분석이 시도되고 그 결과가 반환되어 x에 저장됩니다.

여기서 주요 이점은 변수가 정의되지 않은 경우 구문 분석이 실행되지 않는다는 것입니다.

이 말에 해당 될 수있다 :

if(data) {x = JSON.parse(x);} 
+0

이상한 점은 var x = JSON.parse (data) 일 경우 데이터가로드되지 않지만 x = data && JSON.parse (data) 일 때 작동한다는 것입니다. –

+0

아마도'data'는 정의되어 있지 않으며'data &&'는 JSON.parse()를 실행하지 못하도록 보호합니다. 그렇지 않으면 오류가 발생합니다. – Iceman

+0

데이터가 null 인 경우는 어떻게됩니까? –

관련 문제