node.js restful api 서버 만들기 (with bigQuery)
GET : 서버 자원 가져오기
POST : 서버 자원 등록하기
PUT : 서버 자원 치환 (업데이트 같은...)
PATCH : 서버 자원 일부 치환
DELETE : 서버 자원 삭제
ㅡ. Express 서버
$ sudo npm i express-generator -g
express PROJECT_NAME --view=pug
cd PROJECT_NAME 후 npm i 로 모듈 설치를 진행합니다.
모듈 설치가 완료되면
ㅡ. app.js
app.js 에서 app.use('/users', usersRouter) 부분이
localhost:3000/users 로 접속하면 usersRouter 의 페이지를 띄워주게 됩니다.
users.js 코드를 아래와 같이 구성한다면
var express = require('express'); var router = express.Router(); /* GET users listing. */ router.get('/', function(req, res, next) { res.send('respond with a resource'); }); module.exports = router;
결과화면으로 respond with a resource 가 나오게 됩니다.
post 를 처리해보는 코드를 작성해보겠습니다.
bigQuery 데이터를 fetch 해서 처리하는 로직을 구상했습니다.
$ npm install --save @google-cloud/bigquery
https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries?hl=ko#client-libraries-install-nodejs에서 제공하고 있는 코드를 사용하였습니다. res 를 인자로 받아와서 query()가 실행될때 마지막에 res.send()를 수행하였습니다.
const query=async(res)=>{ // Queries the U.S. given names dataset for the state of Texas. const bigquery = new BigQuery(); const query = `SELECT name FROM \`bigquery-public-data.usa_names.usa_1910_2013\` WHERE state = 'TX' LIMIT 100`; // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query const options = { query: query, // Location must match that of the dataset(s) referenced in the query. location: 'US', }; // Run the query as a job const [job] = await bigquery.createQueryJob(options); console.log(`Job ${job.id} started.`); // Wait for the query to finish const [rows] = await job.getQueryResults(); // Print the results console.log('Rows:'); rows.forEach(row => console.log(row)); res.send(rows) }
/* POST users listing. */ router.post('/', async function(req, res, next) { await query(res) });
(*package.json을 확인하면 script 에 npm start 라고 되어있습니다. 시작은 npm start, default port 는 3000 입니다.)


post 로 요청한 key, value과 query params 로 넘겨주는 부분이었기 때문에
req.query.[key-name] 으로 접근할 수 있습니다.

ㅡ. port 변경
bin/www 에서 변경할 수 있습니다.
#!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('bigqueryapi:server'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); /** * Normalize a port into a number, string, or false. */ function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { // named pipe return val; } if (port >= 0) { // port number return port; } return false; } /** * Event listener for HTTP server "error" event. */ function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } /** * Event listener for HTTP server "listening" event. */ function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind); }
전체 Post 코드
var express = require('express'); var router = express.Router(); const {BigQuery} = require('@google-cloud/bigquery'); const query=async(res, category)=>{ // Queries the U.S. given names dataset for the state of Texas. const bigquery = new BigQuery(); const query = `SELECT name FROM \`bigquery-public-data.usa_names.usa_1910_2013\` WHERE state = 'TX' LIMIT 100`; // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query const options = { query: query, // Location must match that of the dataset(s) referenced in the query. location: 'US', }; // Run the query as a job const [job] = await bigquery.createQueryJob(options); console.log(`Job ${job.id} started.`); // Wait for the query to finish const [rows] = await job.getQueryResults(); // Print the results console.log('Rows:'); rows.forEach(row => console.log(row)); res.send(rows) } /* POST users listing. */ router.post('/', async function(req, res, next) { //res.json(users); await query(res, req.query.category) }); module.exports = router;
'JS' 카테고리의 다른 글
JS06 :: 바닐라 JS 프로젝트(2) (0) | 2021.05.22 |
---|---|
JS06 :: 바닐라 JS 프로젝트 (0) | 2021.05.21 |
JS04 :: webpack (1) | 2020.08.25 |
JS03 :: node.js 버전 관리 (0) | 2020.08.25 |
JS02 :: hash map (0) | 2020.07.29 |
댓글
이 글 공유하기
다른 글
-
JS06 :: 바닐라 JS 프로젝트(2)
JS06 :: 바닐라 JS 프로젝트(2)
2021.05.22이전 바닐라 JS 프로젝트에서 배경화면을 변경하여 나만의 앱을 생성해보겠습니다. 정적인 화면을 구성하는 index.html 에서 배경화면 처리를 위한 script를 등록하겠습니다. index.html에서 weather.js 를 등록해줍니다. index.html bg.js image는 총 3장을 준비하였습니다. 오리 3총사 image 객체를 생성하고 나면 css의 선택자 class를 포함시키고, body 태그에 해당 tag 를 prepend 하게 됩니다. body 안에 image 가 잡히게 됩니다. (css에서 z-index = -1 로 잡았기 때문에 현재 맨 뒤로 가있는 상태입니다.) 이 다음 코드인 weather.js 구현해야 하는데 현재 위치 좌표를 받아오지 못하고 있다. mac에서 위치 좌표를 설정… -
JS06 :: 바닐라 JS 프로젝트
JS06 :: 바닐라 JS 프로젝트
2021.05.21바닐라 JS 공부를 시작하면서, 노마드 코더에서 제공하는 바닐라 JS로 크롬웹 만들기를 트라이 해보았습니다. Directory 구조 우선 가장 베이직이 되는 index.html 부터 살펴보겠습니다. html의 구조는 head, body 로 이루어져 있습니다. stylesheet에 포함되어 있는 index.css 로부터 css 값을 읽어와 html이 web의 DOM에 업데이트 하게 됩니다. index.html 보통의 경우에 아래와 같이 많이 사용하게 됩니다. HTML Foramt 여기서 div tag를 이용해 웹 상에 움직이는 시계를 트라이 해보겠습니다. 첫번째 구현 항목은 web으로 동작하는 시계를 만들어보는 것입니다. Redering 화면 ⏤ 1 위 렌더링 화면을 구성하기 위해서 아래 html, js를… -
JS04 :: webpack
JS04 :: webpack
2020.08.25Vue.js 와 같이 애플리케이션을 CLI로 사용하여 프로젝트 생성하면 자연스럽게 설치되는 모듈 번들러 입니다. ㅡ. 모듈 번들러란? 여러개의 파일을 하나의 파일로 묶어주는 라이브러리를 말합니다. 종속성을 파악해서 서로 엮어 있는 파일을 하나의 파일로 묶어주는 역할을 수행합니다. ㅡ. webpack을 사용하는 이유 1. 네트워크 병목현상 해결 2. 모듈 단위로 개발 가능 3. es6 버전 이상의 스크립트를 사용할 수 있습니다. ㅡ. 오래된 브라우저에서도 es6버전 이상의 자바스크립트 문법 사용이 가능해집니다. ㅡ. webpack 컨셉 1. Entry ㅡ. 종속성 그래프의 시작점을 의미합니다. 2. Output ㅡ. 번들을 저장할 위치를 지정할 수 있습니다. 3. Loader ㅡ. webpack이 이해할 … -
JS03 :: node.js 버전 관리
JS03 :: node.js 버전 관리
2020.08.25n 은 Node.js 버전을 관리해주는 플러그인입니다. $node -v 우선적으로 node 버전을 확인합니다. $ sudo npm install -g n n모듈을 설치합니다. node버전에 따라서 다음 3가지로 분류합니다. 1. 최신버전, 2. 안정버전, 3.LTS버전 1. 최신버전 $ n latest 2. 안정버전 $ n stable 3. LTS버전 $ n lts
댓글을 사용할 수 없습니다.