묻고 답해요
121만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
자바스크립트 변수 스코프에 대해 질문드립니다.
강사님 안녕하세요변수 스코프에 대해 질문드립니다.자바스크립트는 변수를 참조할 때 현재 블록 부터 시작해 상위 블록으로 올라가며 변수를 찾는다고 이해하고 있습니다.그래서 아래의1번째 코드는 이해가 됩니다.const b=10; 함수(a=>({ a: b //b는 10입니다. }));여기서 2번째 b는 상위 블록으로 올라가며 const b =10 을 찾습니다.그래서 a: 10이 됩니다. 그러나 2번째 코드의 경우 이해가 어려웠습니다.const b=10; 함수(b=>({ //b는 undefined 입니다. a: 11 }));이때는 콜백함수의 매개변수 b에 10이 아닌 undefined가 들어갑니다.여기서 이해가 어려웠습니다.자바스크립트는 변수를 참조할 때 현재 블록 부터 시작해 상위 블록으로 올라가며 변수를 찾습니다. 그렇다면 1번째 코드처럼 2번째 코드에서도 파라미터 b에 10이 들어간다고 생각했는데, 제가 잘못 생각한 부분을 가르쳐주시면 감사하겠습니다.
-
미해결
API 실행시 에러
해당 에러 구글링해도 제가 아직 배움이 짧은지 이해를 못하겠습니다.
-
미해결
자바스크립트 this에 대해서 정리해봤습니다
https://velog.io/@wn8624/22%EC%9E%A5-this
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
시작은 프리캠프 final 과제 질문
안녕하세요 과제 중 해결되지 않는 문제가 있어 문의 드립니다. 인증 확인 버튼을 누를 때'인증이 완료되었습니다' 안내창 띄우기안내창 확인을 누르면, 인증 확인 버튼 텍스트 인증 완료로 변경인증 확인 버튼 비활성화가입하기 버튼 활성화과정을 하고 있습니다.const timer__button = () => { alert("인증이 완료되었습니다.") document.getElementById("timer__button").innerText = "인증 완료" document.getElementById("timer__button").disabled = true document.getElementById("submit").disabled = false }인증 확인 버튼을 누르면,'인증이 완료되었습니다.' 안내창이 뜨고, 인증 확인에서 인증 완료로 텍스트가 변경됩니다.하지만 버튼의 활성화와 비활성화가 되지 않습니다. 타이머가 작동되고 있는 동안 타이머가 활성화되도록 한 코드 때문에 씹히는 걸까요? 혹시 몰라 타이머 부분 코드도 첨부합니다.const randomNumber__button = () => { document.getElementById("randomNumber__button").disabled = true let randomNumber = String(Math.floor( Math.random() * 1000000 )).padStart(6,"0") document.getElementById("randomNumber__number").innerText = randomNumber let time = 7 let timer = true timer = setInterval(function(){ if(time >= 0){ let min = Math.floor(time/60) let sec = String(time%60).padStart(2,"0") document.getElementById("timer__number").innerText = min + ":" + sec time = time - 1 document.getElementById("timer__button").disabled = false } else { document.getElementById("timer__button").disabled = true document.getElementById("randomNumber__number").innerText = "000000" document.getElementById("timer__number").innerText = "3:00" clearInterval(timer) } },1000) } 혹시 이 코드에 영향을 받아 버튼 비활성화가 안 되는 거라면 타이머 숫자를 3:00(기본 세팅 값)으로 바꾸면 될까 했지만 역시 안 됐습니다.const timer__button = () => { document.getElementById("timer__button").innerText = "인증 완료" alert("인증이 완료되었습니다.") document.getElementById("timer__number").innerText = "3:00" // document.getElementById("timer__button").disabled = true // document.getElementById("submit").disabled = false } 여기저기 찾아본 결과 alert 기능은 안내창이 떠 있는 동안 동작을 일시정지 시키고, alert 다음으로 이어지는 동작을 적어줄 땐 첨부 코드와 같이 단순 나열로 가능하다고 합니다. 다른 코드들 찾아봤을 때도 제가 쓴 코드와 유사했고요. 어느 부분이 문제인 건지, 만약 앞서 작성한 타이머 코드 때문에 씹히는 거라면 어떻게 해결해야 좋을지 힌트를 좀 받고 싶습니다.alert button disabled 이 키워드로 해결책을 검색하며 찾아봤는데요, 혹시 더 적절한 검색 키워드가 있다면 그것도 추천 부탁합니다. 검색도 기술인 것 같은데 요령이 없네요.
-
미해결
빨간줄로 도배됐어요ㅠㅠ
next 13으로 typescript와 함께 개발중입니다어느 순간부터 html태그들과 improt 쪽에 빨간줄이 뜨더니 해결될 생각을 안하더라구요..많이 검색해 본 결과. @types/react, @types/react-dom 을 다운받아야 한다고 해서 다운 받았지만 해결이 안되더라구요...이 외에도 많은 방법들을 시도해 봤지만 효과가 없었습니다. 도와주세요ㅠㅠ 태크에서 나는 에러 : JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.ts(7026)import문에서 나는 에러: Cannot find module 'next/image' or its corresponding type declarations.ts(2307)
-
미해결실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌
프로젝트 생성시 javascript resources가 생성안됨
해당 폴더가 없어서 여기저기 뒤져봤는데https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nateen7248&logNo=220684958878이 방법으로도 안되더라구요2번에 javascript 보면 자동으로 체크되어있어서 체크 해제하고 적용하고체크 한다음에 다시 적용하고 이클립스 껐다 켜봐도 안나타나요이클립스는 2020-06버전이고 eclipse IDE for enterprise hava developers 로 받았는데뭐가 문제인걸까요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
Javascript Exercise Problem List 문
안녕하세요?코드캠프 강의로 열심히 공부 중입니다.좋은 커리큘럼 제공해 주셔서 감사해요.제가 훈훈한 자바스크립트 강의를 복습중인데요.노션에 있는 Javascript Exercise Problem을 풀고 있어요. 그런데 막히는 부분이 생겼어요.01_variable,function,type > 06_addnumberfunction addNumber() { let result; // 숫자 9와 숫자 7을 더했을 때의 결과값을 result에 할당하세요. // 여기에 코드를 작성하세요. result = 9 + 7; return result; } addNumber();이 문제를 풀고 있는데output이 14가 나와야 정답이라고 써있는데요.아무리 해도 답이 16으로 나와요.아직 애송이라 제가 놓친 게 있는지 해서요 ㅠㅠ
-
미해결
input 태그 한글 작성시 '마지막 글자 밀림' 오류와 '문자열 마무리' 오류
안녕하세요 !! 다름이 아니라 현재 제가 일반 브라우저가 아닌 C#기반으로 돌아가는 웹을 작업중인데요input 태그에 한글 작성시 '마지막 글자 밀림'오류와 '문자열 마무리'오류가 발생되어 혹시 해결 방법을 아시는 분이 있을까 하여 글 남깁니다..! 제발 도와주세요 감사합니다 !
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
투두리스트 배경화면 적용 404 오류
강의부분에const weatherDataActive = function({location, weather}){ const locationNameTag = document.querySelector('#location-name-tag'); locationNameTag.textContent = location; console.log(weather); document.body.style.backgroundImage = `url('./images/${weather}.jpg')` };이 부분을 제가 똑같이 따라했는데요 노션에 있는 사진 자료 그대로 다운받았고선생님이 말씀하신 경로에 똑같이 담았는데document.body.style.backgroundImage = `url('./images/${weather}.jpg')`이걸 치니까 직전에 선생님이랑 같이 적용했던 css 백그라운드 이미지(햇빛)도 안나오고 404오류가 떠요ㅠㅠ왜일까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
점 표기법과 []표기법에 대해
디데이 강의를 보고 있는데요.저는 아래와 같이 점표기법으로 짜봤는데 안되더라구여? for(let i = 0; i < timeKeys.length; i++){ console.log(documentObj.docKeys[i]); }그래서 찾아보니 []표기법을 쓰라고해서 for(let i = 0; i < timeKeys.length; i++){ console.log(documentObj[docKeys[i]]); }이렇게 써서 작동이 됐긴 하는데 왜 여기서점 표기법은 안되고 []표기법만 되는 이유를 알고 싶습니다.
-
해결됨[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
이클립스에서 javascript 람다 사용이 가능한가요??
안녕하세요. 11분 15초 쯤부터 Javascript의 람다식을 사용하면 된다고 말씀해주셨습니다. $(document).ready(function() { $("#regBtn").click(()=> { location.href="<c:out value='/register.do'/>"; }); });이클립스에서 ES6 문법 사용이 가능한가요???람다식은 ES6부터 나온 기능으로 알고 있습니다. 이와 같은 버전에 나온 백틱(`)을 사용하려고 했는데, 이클립스에서 에러 표시를 내서 사용을 안 하고 있었습니다.19년 3월 버전의 이클립스 환경에서 보면, Legacy 프로젝트를 생성했는데 ECMA 3 Browser Support Library라고 되어있길래 ES6은 지원이 안 되나 싶었습니다.(다시 보니 ECMA Script가 아니라 ECMA 3 Browser네요 ㅎㅎ; 제가 잘못 예측한 것일 수도 있겠네요)이클립스에서 ES6 버전의 JS를 쓰면 Ajax 결과로 나오는 흔한 JSON 데이터를 편하게 불러올 수 있을텐데 말이죠 ㅠㅠ항상 친절한 답변 감사합니다. 강의 잘 보고 있습니다.
-
미해결
socket.io 실행
안녕하세요채팅을 구현하기위해 socket.io를 썼는데 통신이 안되는 것같습니다 io에 주소를 제대로 넣었고 서버 on 마다 클라이언트에서 emit으로 작성했는데 작동하지 않습니다 이유가 무엇일까요? // server 파일의 코드입니다 require('dotenv').config(); const { createApp } = require('./app'); const { appDataSource } = require('./models/index'); const startServer = async () => { const app = createApp(); const PORT = process.env.PORT; await appDataSource .initialize() .then(() => { const server = app.listen(PORT, () => { console.log(`🟢server is listening on ${PORT}🟢`); }); const io = require('socket.io')(server, { cors: { origin: true, credentials: true, }, }); const { socketMessage } = require('./middlewares/socket.io'); socketMessage(io); }) .catch((err) => { console.log(`❌Failed server connect❌`); appDataSource.destroy(); }); }; startServer(); // server의 socket 파일의 코드입니다 const jwt = require('jsonwebtoken'); const chatDao = require('../models/chatDao'); const { catchAsync } = require('../utils/error'); const socketMessage = (io) => { io.use((socket, next) => { const token = socket.handshake.headers.authorization; if (!token) { return next(new Error('Authentication error')); } jwt.verify(token, process.env.SECRET_KEY, async (err, decoded) => { if (err) { return next(new Error('Authentication error')); } userId = decoded.userId; next(); }); }); io.on('connection', (socket) => { console.log('A User Connected.'); socket.on( 'create_room', catchAsync(async (postId, callback) => { const room = await chatDao.createRoom(userId, postId); socket.join(room.raw.insertId); callback(room.raw.insertId); }) ); socket.on( 'enter_room', catchAsync(async (roomId, callback) => { socket.join(roomId); callback(roomId); }) ); socket.on('new_text', async (content, roomId, callback) => { await chatDao.createChat(userId, content, roomId); socket.to(roomId).emit('new_text', content); callback(content); }); socket.on('disconnect', () => { console.log('접속이 해제되었습니다', socket.id); clearInterval(socket.interval); }); socket.on('error', (error) => { console.error(error); }); socket.on('send', (data) => { console.log(data); socket.emit('reply', { data, }); }); socket.interval = setInterval(() => { socket.emit('news', 'Hello Socket.IO'); }, process.env.SOCKET_INTERVAL || 1000); }); }; module.exports = { socketMessage }; // client 코드입니다import React, { useState, useContext } from 'react'; import io from 'socket.io-client'; import './chat.css'; import { MenuContext } from '../../components/Nav/MenuProvider'; const Token = localStorage.getItem('accessToken'); const socket = io.connect('http://192.168.0.194:4000', { withCredentials: true, extraHeaders: {Authorization: `Bearer ${Token}` } appDataSource.destroy(); }), }); socket.on('connection', () => { console.log('Connected to server'); }); const Chat = () => { const [roomId, setRoomId] = useState([]); const [searchData, setSearchData] = useContext(MenuContext); const handleCreateRoom = event => { event.preventDefault(); socket.emit('create_room', searchData, ({ searchData, roomId }) => { console.log(`Joined room ${roomId}`); setRoomId(roomId); }); }; const handleJoinRoom = roomId => { socket.emit('enter_room', roomId, roomId => { console.log(`Joined room ${roomId}`); setRoomId(roomId); }); }; const handleNewText = content => { socket.emit('new_text', content, roomId, content => { console.log(`Sent message: ${content}`); }); }; const handleNewText = content => { socket.emit('new_text', content, roomId, content => { console.log(`Sent message: ${content}`); }); }; const onCheckEnter = e => {if (e.key === 'Enter') { handleNewText(); } }; return ( <div className="h-screen pt-36"> <button onClick={handleCreateRoom}>테스트</button> <button onClick={() => handleJoinRoom(roomId)}>테스트2</button> <input id="input-text" type="text" onKeyDown={onCheckEnter} /> <button onClick={handleCreateRoom}>제출</button> </div> ); }; export default Chat;
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
섹션5 | Javascript 응용과 싸이월드 실습 4탄 복습 학습자료
안녕하세요! 강의 정말 잘보고있습니다!!프리캠프 섹션5 | Javascript 응용과 싸이월드 실습 4탄 복습 학습자료 상에서 질문이 있어서 여쭤봅니다. else if에서 조건에 만족하는 경우 alert가 뜨게끔 되어 있는 것 같아서,여기 부분에서 else if~ 부분을 아래와 같이 바꿔야하는 것이 아닌지 검토 부탁드릴게요.} else if(8>password.length || password.length>16){ alert("8~16자의 영문, 숫자, 특수문자만 사용 가능합니다.") return false
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
나만의미니프로젝트 cheerio관련질문
원하는 키워드의 값을 담은 상수를 console.log(key,value) 하면 줄바꿈되면서 안에 있는 전체 값들이 나오더라구요 ( const key = $(el).attr("property").split(":")[1]; const value = $(el).attr("content"); 부분입니다)근데 이 값들을 db에 저장하려 for문을 이용해 배열에 넣어봤더니 console.log(key,value)해서 나온 값들이 아닌 마지막 값만 들어갑니다 key와 value에 어떤 형태로 값이 스크랩핑되어 들어가있는건가요..?상수에 배열형태로 들어간 것도 아니고 한줄로 값이 들어간 것도 아니고 .. console.log하면 전체가 나오기는 하나줄바꿈이 되어 나와서 갈피를 못잡겠습니다..스크래핑한 값을 어떻게 저장을하고 넘겨야할지 db로 넘겨야할지 전혀 모르겠습니다................................. 이틀동안 찾아봐도 해결이 안되어서 질문 남깁니다..
-
해결됨한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
새일기를 쓰면 한개가 아닌 두개가 등록이 됩니다ㅠ
윈터로드님 알려주신 덕분에 완강할수잇었습니다ㅠㅠ 인프런 강의 첫 수강완료증을 받앗네요제 프로젝트에 큰오류를 발견했습니다,,,, 새일기쓰면 똑같은게 2개가 만들어지는데 이거 어디서 오류를 수정해야 하는지알수잇을까요?
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
tfjs-node 안깔려서
tfjs-node 안깔려서 해보라고 하는거 해보다가잘 되던 nodemon server.js 도 안되고 뭐가 잘못됐는지 모르겠습니다.빨리 마무리하고 싶은데 답답하네요강의 업데이트 좀 해주셨으면 좋겠는데 생각 없으신가요
-
해결됨바닐라 자바스크립트 10개 프로젝트 만들기(vanilla javascript - 10 projects)
코드
안녕하세요 혹시 코드파일은 지원안하시는건가요?,,
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
1:1 관계 등록 API 강의 creatProduct 시 에러가 발생합니다
삽입시 address 값을 입력했는데도 default 값이 설정되어있지 않다고 에러가 뜹니다.
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
flyctl 관련 재문의 드립니다.
flyctl deploy가 진행이 안돼서제 컴퓨터에 있는 도커를 삭제하고 다시 실행했더니아래와 같은 상태에서 멈췄습니다.구글링 해봐도 잘 모르겠어요 ㅠㅠ어떻게 해결하면 될까요? C:\Users\dahye\Documents\react-project\d-market-server>flyctl deploy ==> Verifying app config--> Verified app config==> Building imageRemote builder fly-builder-quiet-sunset-984 ready==> Building image with Buildpacks--> docker host: 20.10.12 linux x86_6420: Pulling from heroku/buildpacksDigest: sha256:1dd1a9c5f291b47fed1aed3f4c348fdc878380319c15f0e09753a5898482554eStatus: Image is up to date for heroku/buildpacks:2020-cnb: Pulling from heroku/herokuDigest: sha256:c9d053a463c7cd81672a3b0d5d5e26bdcbdffe2782565ccbedc15867b8cddfb9Status: Image is up to date for heroku/heroku:20-cnbWarning: Platform requested deprecated API '0.6'===> DETECTINGWarning: Buildpack 'heroku/ruby@0.0.0' requests deprecated API '0.4'Warning: Buildpack 'heroku/python@0.0.0' requests deprecated API '0.4'Warning: Buildpack 'heroku/scala@0.0.0' requests deprecated API '0.4'Warning: Buildpack 'heroku/php@0.0.0' requests deprecated API '0.4'Warning: Buildpack 'heroku/go@0.0.0' requests deprecated API '0.4'Warning: Buildpack 'heroku/gradle@0.0.0' requests deprecated API '0.4'2 of 3 buildpacks participatingheroku/nodejs-engine 0.8.16heroku/nodejs-npm 0.5.2===> ANALYZINGPrevious image with name "registry.fly.io/d-market-server:cache" not found===> RESTORING===> BUILDING[Heroku Node.js Engine Buildpack][Checking Node.js version]Detected Node.js version range: *Resolved Node.js version: 19.7.0[Installing Node.js distribution]Downloading Node.js 19.7.0Extracting Node.js 19.7.0Installing Node.js 19.7.0[INFO] Installing toolbox[INFO] - yj[INFO] Using npm v9.5.0 from Node[INFO] Installing node modules from ./package-lock.jsonnpm WARN config production Use --omit=dev instead.WARN failed to finish build in graphql: Post "https://api.fly.io/graphql": context canceledOops, something went wrong! Could you try that again?
-
해결됨한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
context에 관해서 질문드립니다.
DiaryStateContext.provider 2중으로 넣는 부분 질문드립니다 .<DiaryStateContext.provider value={data} > 만 써야 되는 이유로 onCreate,onEdit,onRemove 등은 data의 상태가 변경될떄(c,u,d) 마다 리렌더링이 생겨서 최적화가 풀린다고 하셨는데 상태가 변경된다는 말이 onCreate 할떄 data에 실제 생성 ,변경, 삭제 되는 그 로직으로 인한 배열데이터가 변경된다는 말인건가요 ? 그리고. context가 App.js로 부터 data만 받을떄 어차피 onCreate,onEdit,onRemove 함수호출당시에도 data가 변경되고 setData로 변경이 된후에는 어쩃든 data가 추가든 삭제든 수정이든 변경이 될텐데 그러면 app 컴포넌트에서 바뀐 data로 DiaryStateContext 로 데이터를 다시 내려 줄꺼고 그러면 그 하위에 있던 컴포넌트 들은 다시 리렌더링 되지 않을까요 ?