목록
'node js' 122건
-
간단한 콘솔 명령어 만들기(4)CLI 프로그램 명령어를 입력하면 기본적인 html 또는 익스프레스 라우터 파일 템플릿을 만들어주는 코드입니다. cli html main ./public/html 또는 같은 명령어를 입력하면 public 폴더 안에 있는 html 폴더에 main.html이 생기는 식입니다.template.js#!/usr/bin/env nodeconst fs = require("fs");const path = require("path");const readline = require("readline");let rl;let type = process.argv[2];let name = process.argv[3];let directory = process.argv[4] || ".";const htmlTemplate = ` ..
-
스케줄링 구현하기경매가 생성되고 24시간이 지난 후에 낙찰자를 정하는 시스템을 구현해야 합니다. 이럴 때 node-shedule 모듈을 사용해야 합니다.$ npm i node-schedule routes/index.jsconst express = require("express");const multer = require("multer");const path = require("path");const fs = require("fs");const schedule = require("node-schedule");const { Good, Auction, User, sequelize } = require("../models");const { isLoggedIn, isNotLoggedIn } = require("./middlew..
-
실시간 경매 시스템 - 서버센트 이벤트 사용하기(3)이제 경매를 진행하는 페이지를 만들어보겠습니다. 이 페이지는 서버센트 이벤트와 웹 소켓 모두에 연결합니다. views/auction.html{% extends 'layout.html' %}{% block good %} {{good.name}} 등록자: {{good.Owner.nick}} 시작가: {{good.price}}원 {% endblock %}{% block content %} {% for bid in auction %} {{bid.User.nick}}님: {{bid.bid}}원에 입찰하셨습니다. {% if bid.msg %} ({{bid.msg}}) {% endif %..
-
실시간 경매 시스템 - 서버센트 이벤트 사용하기(2)서버센트 이벤트는 한 가지 단점이 있습니다. IE나 엣지 브라우저에서 사용할 수 없다는 것입니다. EventSource라는 객체를 지원하지 않기 때문인데, 다행히 EventSource를 사용자가 직접 구현할 수 있습니다. IE나 엣지 브라우저를 위해 클라이언트 코드에 EventSource 폴리필(polyfill)을 넣었습니다. views/main.html{% extends 'layout.html' %} {% block content %} 경매 진행 목록 상품명 이미지 시작 가격 종료 시간 입장 {% for good in goods %} {{good.name}} {{good.p..
-
실시간 경매 시스템 만들기 - 서버센트 이벤트 사용하기(1)플링이나 웹 소켓을 통해 서버 시간을 받아올 수도 있지만, 이번 예제에서는 서버센트 이벤트를 사용해 서버의 시간을 받아올 것입니다. 주기적으로 서버 시간을 조회하는 데 양방향 통신이 필요하지 않기 때문입니다.웹 소켓도 사용합니다. 웹 소켓은 경매를 진행하는 동안에 다른 사람이 참여하거나 입찰했을 때 모두에게 금액을 알리는 약할을 할 것입니다. 서버센트 이벤트와 웹 소켓은 같이 사용할 수 있습니다.SSE 패키지와 Socket.IO 패키지를 동시에 설치하겠습니다.$ npm i sse socket.io@2 서버와 sse, socket.io 모듈을 연결합니다. app.jsconst express = require("express");const path = require("path");const morgan = ..
-
실시간 경매 시스템 만들기 - 프로젝트 구조 갖추기(3)경매 시스템은 회원가입, 로그인, 경매 상품 등록, 방 참여, 경매 진행으로 이루어져 있습니다. 회원가입, 로그인, 경매 상품 등록 페이지와 라우터를 만들어보겠습니다. views폴더에 error.html을 작상합니다.{% extends 'layout.html' %}{% block content %} {{message}} {{error.status}} {{error.stack}}{% endblock %} views/layout.html {% if user and user.id %} 안녕하세요 {{user.nick}}님 보유 자산: {{user.money}}원 로그아웃 ..
-
실시간 경매 시스템 만들기 - 프로젝트 구조 갖추기(2)모델을 생성한 후에 모델을 데이터베이스 및 서버와 연결합니다. nodeauction 데이터베이스를 생성해야 하므로 config.json을 데이터베이스에 맞게 수정합니다.config/config.json{ "development": { "username": "root", "password": "1234", "database": "nodeauction", "host": "127.0.0.1", "dialect": "mysql" }, "test": { "username": "root", "password": "1234", "database": "nodeauction_test", "host": "127.0.0.1", "dialect": "mysql" }..
-
실시간 경매 시스템 만들기 - 프로젝트 구조 갖추기(1)프로젝트 이름은 NodeAuction입니다. 먼자 node-auction 폴더를 만든 후 그 안에 package.json 파일을 작성합니다.{ "name": "node-auction", "version": "0.0.1", "description": "노드 경매 시스템", "main": "app.js", "scripts": { "start": "nodemon app" }, "author": "Sally", "license": "ISC", "dependencies": { "bcrypt": "^3.0.7", "cookie-parser": "^1.4.4", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session":..
-
프로젝트 마무리하기마지막으로 GIF 이미지를 전송하는 것을 구현합니다. 프런트 화면에서 이미지를 선택해 업로드하는 이벤트 리스너를 추가합니다. views/chat.html{% extends 'layout.html' %} {% block content %}{{title}}방 나가기 채팅 내용 {% for chat in chats %} {% if chat.user === user %} {{chat.user}} {% if chat.gif %} {% else %} {{chat.chat}} {% endif %} {% elif chat.user === 'system' %} {{chat.chat}} {% else %} ..
-
채팅 구현하기프런트에서는 서버에서 보내는 채팅 데이터를 받을 소켓 이벤트 리스너가 필요합니다. chat.html 파일에 추가합니다.{% extends 'layout.html' %} {% block content %}{{title}}방 나가기 채팅 내용 {% for chat in chats %} {% if chat.user === user %} {{chat.user}} {% if chat.gif %} {% else %} {{chat.chat}} {% endif %} {% elif chat.user === 'system' %} {{chat.chat}} {% else %} {{chat.user..
-
미들웨어와 소켓 연결하기(2)이제 라우터 부분을 작성합니다. 라우터에서 몽고디비의 웹 소켓 모두에 접근할 수 있습니다.const express = require("express");const Room = require("../schemas/room");const Chat = require("../schemas/chat");const router = express.Router();router.get("/", async (req, res, next) => { try { const rooms = await Room.find({}); res.render("main", { rooms, title: "GIF 채팅방" }); } catch (error) { console.error(error); next(error); ..
-
미들웨어와 소켓 연결하기방에 입장할 때와 퇴장할 때 채팅방의 다른 사람에게 '#12C6B8님이 입장하였습니다' 같은 시스템 메시지를 초대하려고 합니다. 그런데 사용자의 이름은 세션(req.session.color)에 들어있습니다. socket.IO에서 세션에 접근하려면 추가 작업이 필요합니다.Socket.IO도 미들웨어를 사용할 수 있으므로 express-session을 공유하면 됩니다. 추가로 채팅방 접속자가 0명일 때 제거하는 코드도 같이 넣어보겠습니다.const express = require("express");const path = require("path");const cookieParser = require("cookie-parser");const session = require("express-session");..