2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 5월 26일 21:16 #84697
cion참가자회원 인증 중간에 검사하는 코드인 app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){ 응답.redirect('/') }); 이 코드를 추가하면 오류가 발생합니다. app.post('/login', function(요청, 응답){ 응답.redirect('/') }); 이 코드까지는 문제가 없습니다. 중간에 passport 어쩌고 저쩌고 코드 추가하면
노드몬 앱 크래쉬 충돌이 듭니다. 오류 첨부하겠습니다. ---오류---
ReferenceError: Cannot access 'passport' before initialization at Object.<anonymous> (C:\Users\legoc\OneDrive\바탕 화면\coding\node.js MongoDB로 빠르게 웹 서비스 만들기\server.js:43:20) at Module._compile (node:internal/modules/cjs/loader:1254:14) at Module._extensions..js (node:internal/modules/cjs/loader:1308:10) at Module.load (node:internal/modules/cjs/loader:1117:32) at Module._load (node:internal/modules/cjs/loader:958:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:23:47
Node.js v18.16.0 [nodemon] app crashed - waiting for file changes before starting... --------
서버 코드
// ↓ express 쓰려면 이거 치고 써야함
const express = require('express'); const app = express();
// body-parser 라이브러리가 express에 기본 포함이라 npm으로 설치할 필요가 없습니다. // ↓ 이 코드만 추가
app.use(express.urlencoded({ extended: true }))
// ↓ server.js에서 mongodb 연결하려면 써야하는 코드 const MongoClient = require('mongodb').MongoClient;
// ↓ ejs 파일 쓰기위한 코드 app.set('view engine', 'ejs');
//html에서 put 요청 하기위한 라이브러리 코드
const methodOverride = require('method-override') app.use(methodOverride('_method'))
// ↓ 데이터베이스 접속을 위한 전역변수 필요
var db;
MongoClient.connect('mongodb+srv://admin:qwer1234@cluster0.zjrrzeq.mongodb.net/?retryWrites=true&w=majority', function (에러, client) { if (에러) return console.log(에러); //연결되면 할 일 //몽고DB안에 productlist 라는 데이터베이스 접속하기 코드 db = client.db('productlist');
//collection에 자료 하나 추가하는 방법 // db.collection('post').insertOne({저장할 데이터},콜백함수) - 형식
//서버 띄우는 코드 여기로 옮기기 // lisetn(서버띄울 포트번호, 띄운후 실행할 코드)
app.listen(8080, function () { console.log('8080에 접속했습니다.') }); })
app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){ 응답.redirect('/') });
//누군가 /경로에 방문하면 html 파일을 보내주자.
app.get('/', function (요청, 응답) { 응답.render('index.ejs', {}); })
app.get('/write', function (요청, 응답) { 응답.render('write.ejs', {}); })
app.get('/list', function (요청, 응답) {
//데이터 다 찾을때 db.collection('product').find().toArray(function (에러, 결과) { console.log(결과);
//찾은 결과를 ejs 파일에 넣는다 보낼땐 render 응답.render('list.ejs', { 제품: 결과 }); });
}) // /:id 는 url 파라미터 (detail/ 뒤로 많은 주소 만들수 있다. app.get('/detail/:id', function (요청, 응답) { // 요청.params.id 는 get요청 url 뒤에 오는 번호 따온다. 데이터가 숫자형인데 문자열로 변환되어서 전환시킨다. db.collection('product').findOne({ _id: parseInt(요청.params.id) }, function (에러, 결과) { console.log(결과); 응답.render('detail.ejs', { data: 결과 }); }) })
app.get('/edit/:id', function (요청, 응답) { db.collection('product').findOne({ _id: parseInt(요청.params.id) }, function (에러, 결과) { console.log(결과); 응답.render('edit.ejs', { data: 결과 }); }) })
app.get('/login', function (요청, 응답) { 응답.render('login.ejs') });
// html 폼에서 입력한 정보는 요청에 들어있음.
app.post('/add', function (요청, 응답) { 응답.send('전송완료') // ↓ id 부여하기 위해서 만든 코드 db.collection('count').findOne({ name: '게시물갯수' }, function (에러, 결과) { let 총게시물갯수 = 결과.totalproduct db.collection('product').insertOne({ _id: 총게시물갯수 + 1, 제품이름: 요청.body.product, 가격: 요청.body.data }, function (에러, 결과) { console.log('상품저장완료');
// ↓ 카운터 컬렉션 안에 id 개수 업데이트를 하기위한 코드 $inc는 연산자 여러가지 있음 db.collection('count').updateOne({ name: '게시물갯수' }, { $inc: { totalproduct: 1 } }, function () { }) }) }); })
//누군가 /경로에 delete 요청을 하면 /function을 실행한다 app.delete('/delete', function (요청, 응답) { // ↓ 데이터를 출력하면 문자열로 나오는데 숫자형을 지워야하기 때문에 숫자 변환 코드 요청.body._id = parseInt(요청.body._id) // ↓ 컬렉션 안에 데이터 삭제하는 코드 db.collection('product').deleteOne(요청.body, function (에러, 결과) { console.log('삭제완료') }) })
app.put('/edit', function (요청, 응답) { //요청.body.name은 ejs파일 인풋 네임에 적힌 정보를 가져올수있다. db.collection('product').updateOne({ _id: parseInt(요청.body.id) }, { $set: { 제품이름: 요청.body.product, 가격: 요청.body.data } }, function (에러, 결과) { console.log('수정완료') 응답.redirect('/list') })
})
//npm install passport passport-local express-session //로그인 기능 추가하기 위해 라이브러리 코드 const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const session = require('express-session');
app.use(session({ secret: '비밀코드', resave: true, saveUninitialized: false })); app.use(passport.initialize()); app.use(passport.session());
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.