오늘이 바로 그 날입니다. Node.js 앱이 "가져 오기"를 학습합니다.
이 기본 튜토리얼을 따라 Couchbase에서 데이터를 검색하기 위해 SQL++(일명 N1QL) 쿼리를 전송하는 Node.js 앱용 REST API를 구축하는 방법을 배워보세요.
이 게시물은 다음에 대한 소개 시리즈를 이어갑니다. 카우치베이스와 함께 Node.js 사용다음을 포함합니다. 비동기 함수 그리고 Node.js 및 Express로 REST API 구축하기.
오늘의 게시물은 직접 문서 검색을 위한 REST API를 구축한 후 이전 게시물에서 중단된 부분을 이어서 다룹니다.
카우치베이스 데이터베이스 설정
이 게시물은 여행 샘플
모든 버킷과 함께 제공되는 버킷 카우치베이스 설치. 자동으로 생성되는 인덱스를 사용하고 완전히 반복 가능한 특정 문서 기준이 사용되므로 이 데이터 집합을 설치하는 것이 중요합니다.
기본 연결 및 REST API 기반은 이미 다음에서 설명합니다. 지난주에 함께 만든 스크립트. 오늘의 코드 샘플에 포함할 예정이지만 자세한 설명은 이전 게시물(위 링크)을 모두 읽어야 합니다.
또한 오늘의 예제에서는 단순화를 위해 기본 범위와 컬렉션을 사용하겠습니다. 평소와 마찬가지로 JSON 데이터를 쿼리할 때는 JavaScript, Node.js 및 NoSQL 문서 데이터베이스에 대해 기본적으로 잘 알고 있다고 가정하겠습니다.
N1QL 쿼리 이해
그리고 N1QL 쿼리 언어 는 몇 가지 예외를 제외하면 SQL과 거의 동일합니다.
N1QL 쿼리가 버킷에서 특정 열을 요청하면, 버킷에 있는 모든 일치하는 JSON 문서 목록을 반환합니다. 문서에 해당 열에 대한 데이터가 없는 경우에는 NULL
값으로 필터링하지 않는 한 어디
절을 사용합니다.
문서를 쿼리하려면 최소한 문서에서 기본 인덱스를 사용할 수 있어야 합니다. 그러나 특정 열에 대해 정의된 보조 인덱스가 있으면 쿼리 성능이 향상됩니다.
이 두 인덱스는 모두 쿼리 자체로 만들 수 있으며 스크립트를 통해 또는 카우치베이스 웹 콘솔. 실제로 웹 콘솔에서 인덱스를 탐색하여 이러한 인덱스에 대해 알아보고 인덱스를 만드는 데 사용된 쿼리를 확인할 수 있습니다.
위 예제에서는 열에 다음과 같은 인덱스가 생성됩니다. 도시
에 있는 모든 문서 내에서 여행 샘플
버킷.
샘플 쿼리
코드를 작성하기 전에 웹 콘솔에서 직접 쿼리를 실행하여 예상한 결과를 반환하는지 확인할 수 있습니다. 웹 콘솔에서 쿼리
탭을 클릭하고 다음 쿼리를 입력한 다음 실행
.
1 |
선택 * FROM `여행-샘플` 어디 도시 = 'Los Angeles'; |
콘솔에 323개의 문서가 일치하는 결과가 표시됩니다. 호텔, 공항 등 여러 문서가 혼합되어 반환된다는 점에 유의하세요. 유형
컬럼이 있습니다. (지금은 "열"이라고 말하지만 실제로는 다른 객체 안에 포함될 수 있는 JSON 객체/요소입니다).
아래 예시와 같이 몇 개의 열만 반환하도록 쿼리를 조정합니다.
1 |
선택 유형, 이름, 도시 FROM `여행-샘플` 어디 도시 = 'Los Angeles'; |
쿼리 함수 작성
나머지 코드를 살펴보기 전에 먼저 전달의 기본 사항부터 살펴보겠습니다. Node.js SDK를 사용한 쿼리.
완전한 형식의 쿼리 문자열을 전달하는 대신 내장된 자리 표시자를 사용하여 재사용 가능한 코드로 만드는 것이 좋습니다. 이 경우 명명된 매개변수를 사용합니다: 쿼리에는 플레이스홀더 변수가 포함되며, 사용할 값이 포함된 변수를 전달합니다.
먼저 쿼리 변수를 생성합니다:
1 |
const 쿼리스트랩 = `선택 유형, 이름, 도시 FROM `여행-샘플` 어디 도시 = $CITY;` |
그런 다음 입력 매개변수 변수를 생성합니다:
1 |
const 매개변수 = { 매개변수: { CITY: 'Los Angeles' }} |
그런 다음 이 두 가지를 클러스터 쿼리 함수에 전달하여 결과를 시작하고 반환합니다:
1 |
let 결과 = 기다림 클러스터.쿼리(쿼리스트랩, 매개변수) |
이제 사용자가 만든 모든 기능을 사용할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 |
비동기 함수 getQuery(){ const 쿼리스트랩 = `선택 유형, 이름, 도시 FROM `여행-샘플` 어디 도시 = $CITY;` const 매개변수 = { 매개변수: { CITY: 'Los Angeles' }} 시도 { let 결과 = 기다림 클러스터.쿼리(쿼리스트랩, 매개변수) 콘솔.로그("결과:", 결과) 반환 결과 } catch (오류) { 콘솔.오류("쿼리가 실패했습니다: ", 오류) } }; |
쿼리 REST화
다음 단계는 이 쿼리 함수를 이전 REST API 코드 예제에 추가하여 입력된 도시 이름을 가져와 브라우저에 HTTP 결과를 다시 반환하는 것입니다.
먼저 아래와 같이 도시 이름에 대한 변수를 함수에 전달합니다:
1 |
비동기 함수 getQuery(도시 이름){... |
그런 다음 쿼리 엔드포인트를 생성합니다( get
경로)를 사용하여 REST 응답에 대한 로직을 해당 함수로 이동합니다.
1 2 3 4 5 6 7 8 9 10 11 |
앱.get('/쿼리/:도시명', runAsync(비동기 (req, res) => { var 도시 이름 = req.매개변수.도시 이름; var 쿼리스트랩 = `선택 유형, 이름, 도시 FROM `여행-샘플` 어디 도시 = $CITY;` var 매개변수 = { 매개변수: { CITY: 도시 이름}} 기다림 클러스터.쿼리(쿼리스트랩, 매개변수, 함수(err, 결과){ res.json(결과) }) })); |
그러면 아래 이미지와 같이 웹 브라우저 또는 Postman REST API 도구에서 REST 호출에서 RAW JSON을 반환합니다.
전체 코드 예제
다음은 전체 샘플 코드 결과입니다. 참조를 위해 다른 문서의 일부 이전 코드가 유지됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
var 앱 = require('express')(); var 카우치베이스 = require("couchbase"); 비동기 함수 메인(){ 앱.get('/get/:docid', runAsync(비동기 (req, res) => { var docid = req.매개변수.docid; var docjson = 기다림 getDoc(docid, 함수(err, 결과){ res.json(결과.콘텐츠) }); })); 앱.get('/쿼리/:도시명', runAsync(비동기 (req, res) => { var 도시 이름 = req.매개변수.도시 이름; var 쿼리스트랩 = `선택 유형, 이름, 도시 FROM `여행-샘플` 어디 도시 = $CITY;` var 매개변수 = { 매개변수: { CITY: 도시 이름}} 기다림 클러스터.쿼리(쿼리스트랩, 매개변수, 함수(err, 결과){ res.json(결과) }) })); 앱.듣기(3000, () => 콘솔.로그('포트 3000에서 수신 중')); 함수 runAsync (콜백) { 반환 함수 (req, res, 다음) { 콜백(req, res, 다음) .catch(다음) } } var 클러스터 = new 카우치베이스.클러스터("couchbase://localhost", { 사용자 이름: "관리자", 비밀번호: "관리자" }); var 버킷 = 클러스터.버킷("travel-sample"); var 컬렉션 = 버킷.기본 컬렉션(); var getDoc = 비동기 (키) => { var 결과 = 기다림 컬렉션.get(키); 콘솔.로그(결과) 반환 결과 } } 메인(); |
결론
이 프로젝트에 적용할 수 있는 새로운 방향이 많이 있습니다. 우선, 적절한 오류 캡처를 포함하거나 콘솔에 로그 정보를 출력하거나 results.rows
객체를 사용하여 표 형식의 결과를 생성합니다.
다음과 같이 권장합니다. Node.js SDK의 쿼리 사용에 대한 Couchbase 설명서를 자세히 살펴보세요..
나머지 Node.js + Couchbase 방법 시리즈도 확인해 보세요:
?지금 Couchbase 테스트하기