2016-08-13 2 views
0

배경조건문

JSON 파일이 몽구스 ODM MongoDB를 가진에서 발생되는 검사한다. 그러나 많은 오류가 발생하는 경우 mongoose 쿼리를 if 문에 추가하기가 어렵습니다.

json으로 접근

이 방법을 사용, 난 JSON 파일에 MongoDB를 수집, ID를 해제 읽을 수있는 시도를 캐시합니다. JSON 파일이 위의 특정 전보 봇 명령을 실행할 수있는 사용자 목록을 포함

[ 
    { 
    "userid": "58258161" 
    }, 
    { 
    "userid": "135207785" 
    }, 
    { 
    "userid": "268339963" 
    }, 
    { 
    "userid": "210152609" 
    } 
] 

:

나는이 (객체의 배열)처럼 보이는 mods.json 파일이 있습니다.

var config = require('./config.json'); 
var mods = require('./mods.json'); 

bot.onText(/\/test/i, function (msg) { 
    var fromId = msg.from.id; 
    var chatId = msg.chat.id; 
    for (index in mods) { 
     if (fromId == config.owner || mods[index].userid) { 
      console.log('You Are A Mod!'); 
    } else { 
     console.log('Not A Mod'); 
     bot.sendMessage(chatId, 'You are not a mod'); 
    } 
    } 
}); 

작동하도록되어 어떻게 위의 간략한 설명 : 로봇이 "/ 테스트"를 수신하면

는이 메시지가 id가있는 소유자인지 확인하도록되어 명령 config.json 파일이나 고유 ID가 mods.json 파일에 저장된 중재자에 저장됩니다.

모든 단일 ID를 통해

다음 코드 검사 메시지가 모드에서인지 여부를 확인하는 문제. 그리고 나서 '당신은 모드가 아닙니다'라는 메시지가 여러 번 울립니다. 조건문 'if'에서 사용자를 확인하는 가장 좋은 방법은 무엇입니까?

몽고 접근

moongose ​​콜백이 필요로 질의, 나는 이러한 시나리오의 경우 조건을 만드는 방법을 정확하게 잘 모릅니다. 그러나이 방법은 분명히 그런 상황에서 더 나을 것입니다. ID가, 배열의 메시지가 모든 반복에 출력되지 않습니다 그런 식으로되어있는 경우가 확인 대신 Array.some을 사용할 수

+0

이후 mongoDB 쿼리가 작동하도록 만들어야합니다. 이러한 오류를 게시 할 수 있으며 도움을 드릴 수 있습니다. –

+0

위의 편집을 확인하십시오 –

+0

사용자 정의 mongoose 메소드가 그 객체를 찾으려고 시도 할 수 있습니다. –

답변

2

, 당신이 일을 끝낼 경우에만 바람직하게는 만들 것

var isMod = fromId == config.owner || mods.some(x => fromId == x.userid); 

if (isMod) { 
    console.log('You Are A Mod!'); 
} else { 
    console.log('Not A Mod'); 
    bot.sendMessage(chatId, 'You are not a mod'); 
} 

확인 데이터베이스에 대신 묻는 쿼리입니다.

model.find({'mods.userid': config.owner}, function (err, docs) {... 
+0

또는 오히려'fromId == config.owner || mods.some (x => x.userid);' – str

+0

@str - yupp, 모든 반복에서 동일한 변수를 검사하지 않는 것이 훨씬 더 합리적입니다. – adeneo

+0

문제가 해결되었습니다! –