작성
·
1.1K
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)
답변 4
1
1
0
//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
//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 };
user고쳐도 여전히 JSON39 에러 였는데
postman에서 password에 빨간 밑줄있던거 고치니까 되네요!
도움주셔서 감사합니다! :))