inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

노드 리액트 기초 강의 #12 토큰 생성 with jsonwebtoken

postman html에러(unexpected string in JSON at position 39)

1305

jhj9328

작성한 질문수 1

0

postion 39는 검색해도 잘 안나오네요...

뭐가 문제일까요.. ㅠㅠ

늦었지만 혹시 몰라 질문 남깁니다...!

 

SyntaxError: Unexpected string in JSON at position 39
    at JSON.parse (<anonymous>)
    at parse (C:\Users\kelly\Documents\boiler-plate\node_modules\body-parser\lib\types\json.js:89:19)
    at C:\Users\kelly\Documents\boiler-plate\node_modules\body-parser\lib\read.js:128:18
    at AsyncResource.runInAsyncScope (node:async_hooks:202:9)
    at invokeCallback (C:\Users\kelly\Documents\boiler-plate\node_modules\raw-body\index.js:231:16)
    at done (C:\Users\kelly\Documents\boiler-plate\node_modules\raw-body\index.js:220:7)
    at IncomingMessage.onEnd (C:\Users\kelly\Documents\boiler-plate\node_modules\raw-body\index.js:280:7)
    at IncomingMessage.emit (node:events:539:35)
    at endReadableNT (node:internal/streams/readable:1345:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)

nodejs react

답변 4

1

KIP

 

image우선 이 부분에 콜백 2번째 인자 usuer 이라고 되어있네요. 한번 고치고 다시 해보시겠어요?

0

jhj9328

user고쳐도 여전히 JSON39 에러 였는데
postman에서 password에 빨간 밑줄있던거 고치니까 되네요!
도움주셔서 감사합니다! :))

1

KIP

실제로 코드 작성한 부분을 볼 수 있을까요?

0

jhj9328

//index.js

const express = require("express");
const app = express();
const port = 5000;
const cookieParser = require("cookie-parser");
const bodyParser = require("body-parser");
const config = require("./config/key");
const { User } = require("./models/User");

//application/x-www-form-urlencoded를 분석해서 가져올 수 있게
app.use(bodyParser.urlencoded({ extended: true }));

//application/json
app.use(bodyParser.json());
app.use(cookieParser());

const mongoose = require("mongoose");
mongoose
  .connect(config.mongoURI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    //useCreateIndex: true,
    //useFindAndModify: false,
  })
  .then(() => console.log("MongoDB Connected..."))
  .catch((err) => console.log(err));

app.get("/", (req, res) => res.send("Hello World!새로고침하기전에 바뀌어용"));

app.post("/register", (req, res) => {
  //회원가입할때 필요한 정보들을 client에서 가져오면
  //그것들을 데이터베이스에 넣어준다.

  const user = new User(req.body);

  user.save((err, userInfo) => {
    if (err) return res.json({ success: false, err });
    return res.state(200).json({
      success: true,
    });
  });
});

app.post("/api/users/login", (req, res) => {
  //요청된 이메일을 데이터베이스에서 있는지 찾는다.

  User.findOne({ email: req.body.email }, (err, user) => {
    // console.log('user', user)

    if (!user) {
      return res.json({
        loginSuccess: false,

        message: "제공된 이메일에 해당하는 유저가 없습니다.",
      });
    }

    //요청된 이메일이 데이터 베이스에 있다면 비밀번호가 맞는 비밀번호 인지 확인.

    user.comparePassword(req.body.password, (err, isMatch) => {
      // console.log('err',err)

      // console.log('isMatch',isMatch)

      if (!isMatch)
        return res.json({
          loginSuccess: false,
          message: "비밀번호가 틀렸습니다.",
        });

      //비밀번호 까지 맞다면 토큰을 생성하기.

      user.generateToken((err, user) => {
        if (err) return res.status(400).send(err);

        // 토큰을 저장한다. 어디에 ? 쿠키 , 로컳스토리지

        res
          .cookie("x_auth", user.token)

          .status(200)

          .json({ loginSuccess: true, userId: user._id });
      });
    });
  });
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

0

jhj9328

//user.js

const mongoose = require("mongoose");
const bcrypt = require("bcrypt");
const saltRounds = 10;
const jwt = require("jsonwebtoken");

const userSchema = mongoose.Schema({
  name: {
    type: String,
    maxlength: 50,
  },
  email: {
    type: String,
    trim: true,
    unique: 1,
  },
  password: {
    type: String,
  },
  lastname: {
    type: String,
    maxlength: 50,
  },
  role: {
    type: Number,
    default: 0,
  },
  image: String,
  token: {
    type: String,
  },
  tokenExp: {
    type: Number,
  },
});

userSchema.pre("save", function (next) {
  var user = this;

  if (user.isModified("password")) {
    //비밀번호를 암호화 시킨다. save하기 pre에 할 function을 정함.(bcrypt를 통해)
    bcrypt.genSalt(saltRounds, function (err, salt) {
      if (err) return next(err);
      bcrypt.hash(user.password, salt, function (err, hash) {
        if (err) return next(err);
        user.password = hash;
        next();
      });
    });
  } else {
    next();
  }
});

userSchema.methods.comparePassword = function (plainPassword, cb) {
  //암호화된 비밀번호와 plainpassword가 같은지 체크해야함.
  bcrypt.compare(plainPassword, this.password, function (err, isMatch) {
    if (err) return cb(err);
    cb(null, isMatch);
  });
};

userSchema.methods.generateToken = function (cb) {
  var user = this;
  //jsonwebtoken을 이용해서 token을 생성하기
  var token = jwt.sign(user._id.toHexString(), "secretToken");

  // user._id+ "secretToken" = token
  // ->
  // 'secretToken' -> user._id

  user.token = token;
  user.save(function (err, user) {
    if (err) return cb(err);
    cb(null, usuer);
  });
};
const User = mongoose.model("User", userSchema);

module.exports = { User };

깃 이메일이랑 비번이 필요하다고 하네요

0

38

1

404 에러

0

105

1

34강 인증 체크에서 element 사용 때문에 에러나시는 분들 이렇게 하심 됩니다.

0

121

1

로그인, 로그아웃, 토근 작동 안 함

0

241

0

9강 오류 어떻게 해결하나요?

0

195

1

localhost 에서 연결을 거부했습니다.

0

1941

4

포스트맨에서 true가 안떠요

0

152

1

왜 안되나요

0

130

1

몽고db 연결 오류가 납니다 위에껀 입력한 코드, 아래껀 터미널이에요

0

244

1

로그아웃 401 에러(Unauthorized)

0

506

2

암호가 해싱되지 않고 입력값 그대로 db에 저장되는 문제

0

151

1

7강중에서

0

167

2

User.findByToken is not a function

0

214

1

루트 디렉토리

0

275

1

useState

0

564

1

프록시 잘 설정했는데도 404 오류 뜨는 분들

5

879

6

webpack 관련 에러 질문

0

221

1

리액트 관련 질문

0

275

1

14강 로그아웃 안됨

0

319

1

mongoDB 데이터 확인하는 법

0

413

1

postman 에러

0

295

1

선생님 리덕스를 사용하면 어떠한 부분이 좋은지 알 수 있을까요?

0

236

1

다음과 같은 에러들이 발생합니다.

0

275

1

14강 로그아웃 기능 구현시 postman에서 Cannot POST 오류가 뜹니다.

0

380

1