강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

jasan88님의 프로필 이미지
jasan88

작성한 질문수

React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드

Ch4-4. 관리자 계정 생성하기

ch4-4관리자 계정생성하기 문제 발생

해결된 질문

작성

·

40

0

아래와 같은 오류가 발생됩니다....

 

Error: Cannot find module 'bcrypt'

Require stack:

- /Users/sungwon/Desktop/Project/Web/company_website/backend/routes/user.js

- /Users/sungwon/Desktop/Project/Web/company_website/backend/index.js

at Module._resolveFilename (node:internal/modules/cjs/loader:1369:15)

at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)

at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)

at Module._load (node:internal/modules/cjs/loader:1179:37)

at TracingChannel.traceSync (node:diagnostics_channel:322:14)

at wrapModuleLoad (node:internal/modules/cjs/loader:235:24)

at Module.require (node:internal/modules/cjs/loader:1449:12)

at require (node:internal/modules/helpers:135:16)

at Object.<anonymous> (/Users/sungwon/Desktop/Project/Web/company_website/backend/routes/user.js:3:16)

at Module._compile (node:internal/modules/cjs/loader:1692:14) {

code: 'MODULE_NOT_FOUND',

requireStack: [

'/Users/sungwon/Desktop/Project/Web/company_website/backend/routes/user.js',

'/Users/sungwon/Desktop/Project/Web/company_website/backend/index.js'

]

}

Node.js v24.4.0

[nodemon] app crashed - waiting for file changes before starting...

 

아래는 index.js 코드입니다.

require('dotenv').config();
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const PORT =3000;

const userRoutes = require("./routes/user");
app.use('/api/auth',userRoutes);

app.get('/', (req, res) => {
    res.send('Hello World!');
});

mongoose.connect(process.env.MONGO_URI)
.then(() => console.log('MongoDB와 연결이 되었습니다.'))
.catch((error)=> console.log('MongoDB와 연결이 실패하였습니다:',error));

app.listen(PORT, () => {
    console.log("Server is running");
    })

models>User.js 코드입니다.

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema(
    {
        username:{
            type:String,
            require: true,
            trim: true,
            minlength:2,
            maxlength:30,
        },
        password:{
            type:String,
            require:true,
            select: false,
        },
        isLoggedIn:{
            type:Boolean,
            default:false,
        },
        isActive:{
            type:Boolean,
            default:false,
        },
        failedLoginAttempts:{
            type:Number,
            default:0,
        },
        lastLoginAttempts:{
            type:Date,
        },
        ipAddress:{
            type:String,
            trim:true,
        },
        createdAt:{
            type:Date,
            default: Date.now,
        }
    },
    {
        timestamps:true,

    }
);
const User = mongoose.model('User', userSchema);

module.exports = User;

 

routes>user.js코드 입니다.

const express = require('express');
const router = express.Router();
const bcrypt = require('bcrypt');
const User = require('../models/User');

router.post('/signup', async (req, res) => {
    try {
        const {username, password} = req.body;
        const existingUser=await User.findOne({username});
        if(existingUser){
            return res.status(400).json({message:'이미 존재하는 사용자 입니다.'});
        }
        const hashedPassword = await bcrypt.hash(password,10);

        const user = new User({
            username,
            password:hashedPassword,
        })
        await user.save();
        res.status(201).json({message:'회원가입이 완료되었습니다.'});
    } catch(error){
        res.status(500).json({message:'서버 오류가 발생되었습니다.'});
        console.log(error);
    }
});

module.exports = router;

답변 2

0

닭강정님의 프로필 이미지
닭강정
지식공유자

안녕하세요. 질문 주셔서 감사합니다!

챕터 4-4에서는 관리자 계정을 생성하는 과정에서 비밀번호를 bcrypt 패키지를 이용해 암호화했습니다. 저희가 직접 암호화 로직을 구현하기보다는, 이미 다른 개발자가 개발하여 패키지 형태로 제공하는 bcrypt를 활용했습니다.

### routes/user.js signup 함수 중 일부
const hashedPassword = await bcrypt.hash(password, 10);

현재 질문자님께 발생한 오류는 bcrypt 패키지가 설치되어 있지 않거나, 설치되어 있어도 Node.js에서 해당 패키지를 인식하지 못할 때 발생하는 문제입니다.


해결 방법: bcrypt 패키지 재설치

# backend 폴더로 이동해서 설치를 진행해야 합니다.
cd backend 

# bcrypt 패키지 삭제 명령어
npm uninstall bcrypt

# bcrypt 패키지 설치 명령어
npm install bcrypt
# backend/package.json 코드 중 일부 
 "dependencies": {
    "axios": "^1.7.9",
    "bcrypt": "^5.1.1", <- 설치가 정상적으로 완료가 되었다면 package.json dependencies에 명시가 됩니다. 
    "body-parser": "^1.20.3",
    "cookie-parser": "^1.4.7",
    "dotenv": "^16.4.7",
    "express": "^4.21.2",
    "jsonwebtoken": "^9.0.2",
    "mongoose": "^8.9.2",
    "nodemon": "^3.1.9"
  }

이 방법으로도 문제가 해결되지 않는다면, 현재 사용 중인 Node.js 버전, 운영체제 환경, 그리고 발생하는 오류 메시지 전체를 함께 알려주세요. 확인 후 보다 구체적인 해결 방법을 안내해 드리겠습니다. 감사합니다!

0

안녕하세요 bcrypt라는 모듈이 없어서 발생한 거 같아요!

혹시 모듈 설치를 하셨는지 궁금합니다!

아래 명령어를 통해 설치하시면 될 거 같습니다


npm install bcrypt
# or
yarn add bcrypt
jasan88님의 프로필 이미지
jasan88

작성한 질문수

질문하기