lisyoen / qrscanner

QRCode Reader
0 stars 0 forks source link

REST API prompt #2

Open lisyoen opened 1 year ago

lisyoen commented 1 year ago

node.js 로 아래 REST API 작성해줘. DB 종류 SQLite 데이터베이스는 qrScanner 테이블명은 files 필드는

id (file ID, 자동증가) postdtime (file 등록 일시) filename (파일명, key) filesize (파일크기) url (저장 주소)

API method 는 POST url 은 /post 포트는 3000 입력값은 query param 에 filename (파일명, key) filesize (파일크기) offset (저장위치) codesize (저장크기) body 에 content (저장내용)

API 가 호출되면 파라미터를 콘솔에 출력해줘. files 테이블에 filename, filesize 를 저장하고 생성된 id 로 로컬폴더에 파일을 만들어서 offset 위치에 content 를 저장해줘.

설명은 필요 없고 전체 소스코드만 한 번에.

설치할 모듈이 있으면 설치 명령어도 알려줘.

lisyoen commented 1 year ago

npm install express npm install body-parser npm install sqlite3

lisyoen commented 1 year ago

const express = require('express'); const sqlite3 = require('sqlite3').verbose(); const fs = require('fs');

const app = express(); const port = 3000;

// Create a new database connection const db = new sqlite3.Database('qrScanner.db');

// Create a table for files if it does not exist db.run('CREATE TABLE IF NOT EXISTS files (id INTEGER PRIMARY KEY AUTOINCREMENT, postdtime DATETIME DEFAULT CURRENT_TIMESTAMP, filename TEXT UNIQUE, filesize INTEGER, url TEXT)');

// Create a route to handle POST requests app.post('/post', (req, res) => { // Get the filename, filesize, offset, codesize and content from the request query and body const { filename, filesize, offset, codesize } = req.query; const content = req.body;

// Print the parameters to the console console.log(filename: ${filename}, filesize: ${filesize}, offset: ${offset}, codesize: ${codesize}, content: ${content});

// Insert the file into the database db.run('INSERT INTO files (filename, filesize, url) VALUES (?, ?, ?)', [filename, filesize, offset], function(err) { if (err) { // If the filename already exists, update the filesize and url instead db.run('UPDATE files SET filesize = ?, url = ? WHERE filename = ?', [filesize, offset, filename], function(err) { if (err) { console.log(err); res.status(500).send('Internal Server Error'); return; } // Save the content to a file with the generated ID as the filename const fileId = this.lastID; fs.writeFile(${fileId}.txt, content, (err) => { if (err) { console.log(err); res.status(500).send('Internal Server Error'); return; } res.send('File saved successfully'); }); }); } else { // Save the content to a file with the generated ID as the filename const fileId = this.lastID; fs.writeFile(${fileId}.txt, content, (err) => { if (err) { console.log(err); res.status(500).send('Internal Server Error'); return; } res.send('File saved successfully'); }); } }); });

// Start the server app.listen(port, () => { console.log(Server listening on port ${port}); });