묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨mongoDB 기초부터 실무까지(feat. Node.js)
몽고 db를 백업방법을 부탁합니다.
mongodump로 로컬에 설치된 몽고 db를 백업하려 하는데 아래의 오류가 나옵니다.해결방법을 부탁합니다.- (mongodump.exe)를 별도로 다운받아야 하나요?-최신버전에는 mongodump.exe파일이 설치되어 있지 않습니다.[오류메세지]'mongodump'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는배치 파일이 아닙니다
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
error처리 질문드립니다
error처리 질문드립니다.현재 라우터에는 /about1234는 없습니다. http://localhost:5000/about12344 여기입력해서 들어가면 강의처럼 err로 가서 asdasd가 나와야하는걸로 이해하고있습니다. 이렇게 나옵니다.asdasd가 나와야하는거 같은데 뭐가 잘못된건지 잘모르겠습니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
multer를 사용해서 이미지 업로드할때 db(mysql)에 질문있습니다
uuid를 통해서 file의 원본이름을 변경해서 mysql의 image컬럼에 아래처럼 저장하고있습니다. \images\042c8bb1-e0fd-4005-85e9-68d7c587c02d.png홈페이지를 접속하면(로그인 안되면 로그인 페이지로 이동) 로그인했을때만(jwt 토큰을 발행해서 cookie에 보내주고) 홈페이지를 접속가능하게 하였습니다.홈페이지로 이동하면 이미지들을 볼수있도록 했습니다. 근데 이미지주소 복사하면 로그아웃해도 해당이미지가 나옵니다.제가 하고자는건 로그인했을때만 이미지보여주고 해당 이미지주소입력하면(로그인 안됐을때) 이미지가 안보이도록 하고싶은데 어떻게 해야할까요?db에 image컬럼에 원본이름만 저장하고 다른폴더에 이미지를 저장하고 db 인덱싱을통해서 이미지를 가져와서 이미지를 보여주도록 할려면 어떻게 해야할까요?(db인덱싱을통해(원본이름) 다른폴더에있는 해당이미지 가져오도록 하려면 어떻게해야할지 잘 모르겠습니다). 하나의 게시글에 다중이미지를 업로드하면 다중이미지를 보여주게 할려면 어떻게해야할까요? 현재는 db에 넣으면 num에(ai를통해서) 예를 들어 3장을 업로드하면 num이 1,2,3으로 생성되어서 이미지 경로도 각각 저장되고 홈페이지에서 하나하나씩 보입니다. 그럼 db에 저장을 어떻게해야하나요?사진을보면 밀리미터까지 똑같이 저장이 되는데 하나의 구분에 다중이미지의 주소를 넣을려면 어떻게해야할지요?... 이렇게해놔도 여기로 들어오지도 않고 바로 이미지주소로 검색하면 바로 이미지가 나옵니다.초보자라서 자세히 설명해주시면 감사하겠습니다.
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
node js를 이용하고 mysql에 이미지 경로 저장
nodejs, multer를 통해서 이미지를 업로드했습니다db에 해당 파일명uuid()를 통해서 저장을 했는데 이미지 주소복사 해서 검색해서 들어가면 이미지가 나오는데 검색해도 못들어가게 하려면 어떻게해야하나요? 또는 관리자만 들어갈수있게하려는데 방법이 있을까요
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
Detail.js CSS 관련 강의가 없어진거 같은데요 ?
Update : 게시글 수정하기 강의 들을 차례인데 DetailCSS 부분은 강의 내용이 없는데 값자기 다 적용된체로 수업이 진행 되네요 흐름상 강의가 빠진거 같은데요 ?
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
504 에러
안녕하세요 Reple Upload 파트 에서 에러가 504 에러가 발생 해서 질문드립니다Server -> Router -> reple.js 측에서 20번줄에서 에러가 나고 있는데, terminal에서 더이상 .save callback 을 할수 없다고 뜹니다프론트 쪽에서는 이러한 에러가 뜨고 있는데요 지금 서버랑, 프론트쪽 연결이 되지 않은거 같은데요 어떻게 해결할수 있을까요? 감사합니다mongoose 다운그레이드 해서 해결했습니다
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
ejs, cjs 둘 중 무엇으로 코딩해야하나요?
ejs와 cjs 둘 중 express 프레임워크를 사용해서 프로그래밍을 하려면 어떤 방식을 추천하시나요?
-
해결됨MERN 스택으로 만드는 지도서비스(+ TypeScript)
styled component 버튼 타입에러
import { ReactNode } from "react"; import { Link } from "react-router-dom"; import styled from "styled-components"; interface ButtonProps { children?: ReactNode; onClick: (e: any) => void; type?: "link" | "button"; url?: string; } const StyledButton = styled.button<ButtonProps>` outline: none; border: none; display: flex; align-items: center; justify-content: center; `; function Button({ children, onClick, type = "button", url }: ButtonProps) { const RealButton = <StyledButton onClick={onClick}>{children}</StyledButton>; const RealLink = ( <StyledButton onClick={() => {}}> <Link to={url!}>{children}</Link> </StyledButton> ); return <div></div>; } export default Button;강의를 보고 진행하던중에 RealLink에서 타입오류나 가서 확인을 해보니button onClick이 없으면 styled componenet에서 에러를 내는 것 같습니다. 링크로 쓰면 onClick이벤트를 전달해주면 안될 것 같은데 ()=>{} 이처럼 의미없는 함수를 넘겨주면 될까요
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
선생님 cloudFront를 사용하게되면 S3는 private으로 사용하는게 좋을까요
s3를 퍼블릭으로 두는것은 좋지 않다고 생각하는데,CDN 주소로 접근하는거면 s3는 private으로 하고 사용할수 있도록 설정이 가능할까요?
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
선생님 aws-sdk 모듈을 찾을 수 없다고 합니다.
aws-sdk는 따로 설치를 안해도 괜찮도 하셔서 설치를 안했습니다. 하지만 Cannot find module 'aws-sdk' 에러가 발생합니다.
-
미해결사물인터넷 통신은 내 손에 (Arduino, MQTT, Nodejs, MongoDB, Android,VS Code)
다른서버에서 mqtt 접속 테스트가 안되네요.
A 장비에서 mqtt 메시지를 보낼 때 B 서버에서 메시지를 받기 위해서 서버에 mosquitto를 설치하고, mosquitto-client를 설치했습니다.그리고 mosquitto.conf 파일에서 아래 두 부분을 추가를 했습니다.listener 1883 allow_anonymous true그리고 서버에서 tcp 포트를 열었습니다.# iptables -I INPUT 1 -p tcp --dport 1883 -j ACCEPT아래 명령어로 설정을 저장하고iptables-save > /etc/iptables.rules아래 명령어로 방화벽에서 1883포트도 열었습니다.firewall-cmd --permanent --zone=public --add-port=1883/tcp그리고 재가동을 했습니다.firewall-cmd --reloadsudo systemctl status mosquitto.service로 조회를 해 보면 Active 상태가 active(running)으로 되어있습니다. 이렇게 한 후 서버에서 mosquitto -v를 실행하면 브로커가 실행이 되고1688558540: mosquitto version 2.0.11 starting 1688558540: Using default config. 1688558540: Starting in local only mode. Connections will only be possible from clients running on this machine. 1688558540: Create a configuration file which defines a listener to allow remote access. 1688558540: For more details see https://mosquitto.org/documentation/authentication-methods/ 1688558540: Opening ipv4 listen socket on port 1883. 1688558540: Opening ipv6 listen socket on port 1883. 1688558540: mosquitto version 2.0.11 running 1688558540: New connection from ::1:58012 on port 1883. 1688558540: New client connected from ::1:58012 as auto-E1654EA0-1FC2-B13F-C9A5-5162C4E11F43 (p2, c1, k60). 1688558540: No will message specified. 1688558540: Sending CONNACK to auto-E1654EA0-1FC2-B13F-C9A5-5162C4E11F43 (0, 0) 1688558540: Received SUBSCRIBE from auto-E1654EA0-1FC2-B13F-C9A5-5162C4E11F43 1688558540: topic (QoS 0) 1688558540: auto-E1654EA0-1FC2-B13F-C9A5-5162C4E11F43 0 topic 1688558540: Sending SUBACK to auto-E1654EA0-1FC2-B13F-C9A5-5162C4E11F43같은 서버에서 아래와 같이 토픽을 보내면mosquitto_pub -h localhost -t test -m "hello world"[root@localhost ~]# mosquitto_sub -t test hello worldsub에서 메시지가 정상적으로 출력이 됩니다.동일 서버에서는 mosquitto 실행도 잘 되고, publish, subscribe 모두 적용이 잘 됩니다. 그런데 문제는 다른 서버에서 발송을 할 때 메시지가 출력이 안됩니다.위의 설정대로 포트를 열고 메시지를 보냈는데 서버쪽에서는 sub를 실행해 놓고 있어도 메시지를 받지를 못하고 있습니다.그래서 port가 열려있는지 로컬에서 확인을 해 보니 아래와 같이 포트가 열려있지 않았습니다. ✘ username@usernameui-MacBookPro ~ nc -vz xxx.xxx.xxx.xxx 1883 nc: connectx to xxx.xxx.xxx.xxx port 1883 (tcp) failed: Operation timed out 문제가 포트가 정상적으로 안열려서 문제가 생긴 것 같은데 위에서 포트를 열었던 방법이 잘못된 걸까요?netstat -lntp로 열려있는 포트를 확인해보면 아래와 같이 열려있다고 나오는데..Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:1883 0.0.0.0:* LISTEN 126689/mosquitto 제가 놓치고 있는 부분이 어떤 부분인지.. 아니면 잘못 설정한 부분이 어떤 부분인지 알 수 있을까요??몇일동안 이 부분때문에 씨름하다가 문의 드립니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
노드버드 7장 오류 질문드립니다
app.jsconst express = require("express"); const cookieParser = require("cookie-parser"); const morgan = require("morgan"); const path = require("path"); const session = require("express-session"); const nunjucks = require("nunjucks"); const dotenv = require("dotenv"); const { sequelize } = require("./models"); dotenv.config(); const pageRouter = require("./routes/page"); const app = express(); app.set("port", process.env.PORT || 8001); app.set("view engine", "html"); nunjucks.configure("views", { express: app, watch: true, }); //force:true로 할 시 서버 재시작시 모든 데이터베이스 날리고 다시 시작, true는 개발용 sequelize .sync() .then(() => { console.log("데이터베이스 연결 성공"); }) .catch((err) => { console.error(err); }); app.use(morgan("dev")); app.use(express.static(path.join(__dirname, "public"))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, }) ); app.use("/", pageRouter); app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} no exist router.`); error.status = 404; next(error); }); app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== "production" ? err : {}; res.status(err.status || 500); res.render("error"); }); app.listen(app.get("port"), () => { console.log(app.get("port"), "waiting at the empty port."); }); index.js const Sequelize = require("sequelize"); const fs = require("fs"); const path = require("path"); const env = process.env.NODE_ENV || "development"; const config = require("../config/config.json")[env]; //설정 불러오기 const db = {}; const sequelize = new Sequelize( //불러온 설정을 시퀄라이즈와 연결하는 부분 config.database, config.username, config.password, config ); const basename = path.basename(__filename); //index.js fs.readdirSync(__dirname) .filter((file) => { return ( file.indexOf(".") !== 0 && // .으로 시작하는 파일은 숨김 파일이라는 의미 그래서 제외 file !== basename && //현재 파일인 index.js는 제외 file.slice(-3) === ".js" //마무리로 확장자가 .js인 파일만 불러오기 ); }) .forEach((file) => { const model = require(path.join(__dirname, file)); console.log(file, model.name); db[model.name] = model; //model.name은 model파일에서 class의 이름과 동일함 model.initiate(sequelize); }); Object.keys(db).forEach((modelName) => { //위에서 initiate할 때 같이 associate까지 하면 되지 않냐라고 할 수 있지만 associate는 모든 파일을 initiate해주고 해야함 console.log(db.modelName); if (db[modelName].associate) { db[modelName].associate(db); } }); module.exports = db; //시퀄라이즈와 그의 모델들은 자주 사용하니까 서로 묵어서 exports 해줌 언제어디서든 쓸 수 있게 .sync() ^TypeError: Cannot read properties of undefined (reading 'sync') at Object.<anonymous> (C:\Users\zzan9\OneDrive - dgu.ac.kr\nodejs\nodebirdSNS2\app.js:22:6) at Module._compile (node:internal/modules/cjs/loader:1267:14) at Module._extensions..js (node:internal/modules/cjs/loader:1321:10) at Module.load (node:internal/modules/cjs/loader:1125:32) at Module._load (node:internal/modules/cjs/loader:965:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12) at node:internal/main/run_main_module:23:47Node.js v20.1.0 이런 오류가 뜨는데 왜 뜨는지 모르겠습니다.. 검색해도 답이 나오지 않길래 질문드립니다
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
sequelize 대신 mongoose를 사용하는 이유
12장 프로젝트는 sequelize로도 구현이 가능할 텐데, seqeulize 대신 mongoose를 사용하신 이유가 궁금합니다. mongoose를 사용하는 것이 더 좋은 성능을 보이나요?
-
해결됨mongoDB 기초부터 실무까지(feat. Node.js)
인덱스 생성시점
선생님, 안녕하세요! 좋은 강의 정말로 감사드립니다!이번 강의를 보면서, 궁금한 게 생겼는데요.이번강의에서 인덱스를 생성하면서, 탐색속도가 훨씬 빨라진다는 걸 알게되었습니다. 기존에 생성되어있는 (인덱스가 걸려있지 않은)데이터들에도 인덱스를 걸어주면 더 빨라지는 걸로 보이는데요. 그런데, 이번 강의에서 인덱스를 걸고 데이터를 생성하면, 인덱스를 걸지않았을 때보다 생성시간이 오래걸리는 부분이 있었습니다. 그렇다면 기존에 인덱스가 걸려있지않은 데이터들에 새로 인덱스를 걸 때는 기존 데이터들에 인덱스를 새로 걸어주는 건가요?
-
미해결MERN 스택으로 만드는 지도서비스(+ TypeScript)
초기 보일러플레이트 설정문제
Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.- options.allowedHosts[0] should be a non-empty string.client 부분에서 실행시 요런오류가나옵니다.1. 시도해본것allowedHosts 옵션관련을 찾기위해 client node_modules./webpackDevServer.config.jsallowedHosts: disableFirewall ? 'all' : [allowedHost], ->확인했을떄 빈문자열이아닌데 왜 이런오류가나오는지..?해결책이궁금합니다.2. 시도해본것 ...client 단 proxy 설정을 지워주면 동작함.->해결.혹시에러원인이 무엇이엿을지 궁금합니다.
-
해결됨mongoDB 기초부터 실무까지(feat. Node.js)
$pull 문법에 대한 질문
선생님, 안녕하세요. 좋은 강의 너무 감사드립니다. 답변도 잘해주셔서 너무 감사드려요!이번 강의를 들으면서,Blog.updateMany( { "comments.user": userId }, { $pull: { comments: { user: userId } } } )이 구문이 나왔는데요. 여기서 updateMany의 첫번째 변수인{ "comments.user": userId },는 comments배열의 user가 userId인 객체를 찾는거고,{ $pull: { comments: { user: userId } } }여기서도 comments배열안의 user가 userId인 객체를 찾는 거라서, 사실상 같은거를 두번 써준 게 아닌가요??그래서 const [user] = await Promise.all([ User.findOneAndDelete({ _id: userId }), Blog.deleteMany({ "user._id": userId }), Blog.updateMany( { "comments.user": userId } // { $pull: { comments: { user: userId } } } ), Comment.deleteMany({ user: userId }), ]);이런식으로 updateMany의 두번째 변수만 Blog.updateMany( { "comments.user": userId } // { $pull: { comments: { user: userId } } } ),이런식으로 주석처리를 해줬습니다. 그러자 { "err": "Cast to ObjectId failed for value \"2023-07-03T10:17:04.313Z\" (type Date) at path \"user\" because of \"BSONError\"" }이런 에러가 나왔어요. 그래서 확인해보니, User.findOneAndDelete({ _id: userId }), Blog.deleteMany({ "user._id": userId }), Comment.deleteMany({ user: userId }),updateMany말고 다른 구문들은 다 실행이 됬더라구요. 그래서 user도 삭제되고 블로그도 삭제되고, comment도 삭제되었지만 blog안의 user가 작성한 comment는 pull되지 않아서 그대로 남아있었습니다. 그런데 여기서 궁금한게, promise.all로 묶어서 같이 실행하면, 하나라도 에러가 나면 바로 실행을 중단하고 에러를 배출한다고 배운 것 같은데, Blog.updateMany의 아래 구문인, Comment.deleteMany가 실행됬더라구요. 트랜잭션까지는 아니더라도 updateMany에서 에러가 나면 Comment.deleteMany는 실행이 안될 줄 알았는데, 이거까지 실행된 거를 보면, Promise.all에서는 전부 순서없이 비동기로 동시에?실행되는 걸까요?
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
new aws.S3 version 확인
"multer-s3": "^2.10", "@types/multer-s3": "^2.7.12", 버전은 위처럼 깔아주셔야 강의와 호환될것같습니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
부하테스트중 errors.ETIMEDOUT:
안녕하세요 json부하테스트중에 에러표시나서 방화벽들어가서 mysql포트 확인하고 3306설정했는데 안되서 포트80도해보고 했는데 에러표시만뜹니다https://binshuuuu.tistory.com/m/214제가 따라한 설정입니다
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
선생님 premium 해결했습니다
선생님 콘솔로그 쳐서 premium위치 찾아서req.user.Domains[5].type === 'premium' 했는데 true 나와서 해결했습니다 감사합니다 앞으로 콘솔로그 쳐서 하는 습관가져야겠습니다 정말 감사합니다 ^_^!!!
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
클러스트생성이 안보여요
몽고디비사이트에서 올가니제이션 만들고 프로젝트만들고 다음순서가 클러스트 생성인데현재 atlas 사이트 보면 클러스트 생성하는게 없어요