728x90
반응형

post로 아이디, 비밀번호의 데이터 값을 반환했을때, undefined가 반환된다.

 

이럴때 사용하는 패키지가 body-parser

"클라이언트 POST request data의 body로부터 파라미터를 편리하게 추출합니다."

 

설치를 한 후,

app.use(bodyParser.json()); //json형태로 변경
app.use(bodyParser.urlencoded({ extended: true })); //한글,공백등 잘못나오는걸 방지

 

설치하고 미들웨어 등록하니

결과값이 잘 출력되었다.

728x90
반응형
728x90
반응형

Uncaught TypeError: Cannot read property 'addEventListener' of null

 

ejs에서 자바스크립트를 사용할때, 위와 같은 에러문구가 발생

문득 생각나서

<script src="/js/login.js" defer></script>

경로 뒤에 defer를 붙였다.

 

defer는 <script> 태그의 defer 속성은 페이지가 모두 로드된 후에 해당 외부 스크립트가 실행됨을 명시합니다.

728x90
반응형
728x90
반응형
app.set("views", "views");
또는
app.set("views", "./views");

app.set("view engine", "ejs");

이런식으로  사용한후 서버를 가동하였으나

Error: Failed to lookup view "login.ejs" in views directory "views"

Error: Failed to lookup view "login.ejs" in views directory "./views"

 

이런식으로 에러문구가 떴다.

어? 근데 문구가 계속 변경되네?

 

강의 또는 다른곳에서 계속 "views", "views"와 같이 사용하니 관례처럼 느껴졌는데

"views"를 고정해주는 역활을 하는 것이기에 뒤에 명확하게 폴더루트를 찾아야 했다.

 

루트 찾는건 require("./src......") 이런식으로 하다보면 에디터에서 자동으로 찾아주니까

위치를 찾아놓고 다음과 같이 경로 확인해주니 정상작동 되었다.

app.set("views", "./src/views");
app.set("view engine", "ejs");

const mainRoutes = require("./src/routes/main");
app.use("/", mainRoutes);

폴더구조과 다른 프로젝트랑 다르다보니 발생한 문제 같다.

하나 더 깨달음을 얻어서 다행이다.

728x90
반응형
728x90
반응형

app.js

const express = require("express");
const app = express();

app.set("views", "views");
app.set("view engine", "ejs");

const mainRoutes = require("./src/routes/main");

app.get("/", mainRoutes);
app.get("/login", mainRoutes);

app.listen(8000, (req, res) => {
  console.log("8000번 서버가동");
});

/routes/main.js

const express = require("express");
const router = express.Router();

router.get("/", (req, res) => {
  res.send("메인화면");
});

router.get("/login", (req, res) => {
  res.send("로그인");
});

module.exports = router;

 

위 상태에서 서버를 실행하면 

Route.get() requires a callback function but got a [object Undefined]

 

뭐가 문제지? 라우터를 내보냈는데 읽지 못하는 것 같다.

유심히 살펴보니

app.get이 아니라 미들웨어로써 사용하는 것이기 때문에

app.use로 바꿔주니 해결 되었다.

 

app.get("/", mainRoutes);
app.get("/login", mainRoutes);

 

이미 라우터에서 "/" , "/login"을 받고 있기 때문에

app.use("/", mainRoutes) 만 등록해주니 해결 완료!

 

728x90
반응형

+ Recent posts