강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jhj93283889
jhj93283889

câu hỏi đã được viết

Chuỗi Node và React để học theo - Bài giảng cơ bản

Bài giảng cơ bản về Node React #12 Tạo mã thông báo với jsonwebtoken

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

Viết

·

1.3K

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)
nodejsreact

Câu trả lời 4

1

 

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

jhj9328님의 프로필 이미지
jhj9328
Người đặt câu hỏi

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

1

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

0

jhj9328님의 프로필 이미지
jhj9328
Người đặt câu hỏi

//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님의 프로필 이미지
jhj9328
Người đặt câu hỏi

//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 };
Hình ảnh hồ sơ của jhj93283889
jhj93283889

câu hỏi đã được viết

Đặt câu hỏi