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 입니다.)

key : category, value : web 으로 post 요청을 보냈습니다.
result 값을 받아올 수 있었고

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  (0) 2020.08.25
JS03 :: node.js 버전 관리  (0) 2020.08.25
JS02 :: hash map  (0) 2020.07.29