【问题标题】:SyntaxError: Unexpected token } in JSON at positionSyntaxError: 位置的 JSON 中的意外标记}
【发布时间】:2019-05-23 14:46:34
【问题描述】:

我正在尝试使用 passportjs 创建注册路线。在 使用邮递员请求,我收到此错误:SyntaxError: JSON 中第 119 位的意外标记 }
  在 JSON.parse ()

下面是我的代码:

const express = require("express");
const router = express.Router();
const gravatar = require("gravatar");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const keys = require("../config/keys");
const passport = require("passport");
//load input validation
const validateRegisterInput = require("../validation/register");
//user model
const User = require("../models/User");

router.get("/test", (req, res) => res.json({ msg: "user route works" }));

//post - api/users/register
router.post("/register", (req, res) => {
  const { errors, isValid } = validateRegisterInput(req.body);
  //check validation
  if (!isValid) {
    return res.status(400).json(errors);
  }
  User.findOne({ email: req.body.email }).then(user => {
    if (user) {
      errors.email = "Email already exists";
      return res.status(400).json(errors);
    } else {
      const avatar = gravatar.url(req.body.email, {
        s: "200", // Size
        r: "pg", // Rating
        d: "mm" // Default
      });

      const newUser = new User({
        name: req.body.name,
        email: req.body.email,
        password: req.body.password,
        avatar
      });


      bcrypt.genSalt(10, (err, salt) => {
        bcrypt.hash(newUser.password, salt, (err, hash) => {
          if (err) throw err;
          newUser.password = hash;
          newUser
            .save()
            .then(user => res.json(user))
            .catch(err => console.log(err));
        });
      });
    }
  });
});

module.exports = router;

以下是我使用邮递员提出的要求:

{
  "name":"Harry",
  "email": "harrypotter@gmail.com",
  "password" : "harry",
  "avatar" : "https://image.jpg",
}

【问题讨论】:

  • 你能说119行的代码是什么
  • 去掉"..image.jpg"后面的逗号
  • 使用这个:{ "name":"Harry", "email": "harrypotter@gmail.com", "password" : "harry", "avatar" : "https://image.jpg" }
  • 我在 '' ..image.jpg'' 之后删除了逗号,我收到了这个错误 TypeError: Expected string but received a undefined.
  • 您的 newUser 对象未完成。头像:req.body.avatar 丢失

标签: javascript node.js express jwt passport.js


【解决方案1】:

根据您的代码,您需要在正文中发送密码 2。所以,使用下面的 curl 请求,你会没事的。

卷曲 -X POST \http://localhost:8080/api/users/register \ -H '缓存控制:无缓存' \ -H '内容类型:应用程序/json' \
-H '邮递员令牌:c437c084-def1-427f-bf43-33b92a747244' \ -d '{ “姓名”:“哈利”,“电子邮件”:“harrypotter@gmail.com”,“密码”: “harry12”、“password2”:“harry12”、“头像”:“https://image.jpg” }'

【讨论】:

  • const UserSchema = new Schema({ name: { type: String, required: true }, email: { type: String, required: true }, 密码: { type: String, required: true } , 头像: { type: String }, date: { type: Date, 默认: Date.now } });
  • 这是我的架构,因为我看到没有密码2,它只在我的验证中
  • 是的,在您的验证中,您正在检查请求正文中不存在的“password2”是否存在。除此之外,is-empt.js 文件中还有另一个错误。在代码前添加“return”,否则您将始终未定义。
  • 因此,由于您的请求正文中没有“password2”,因此 register.js 的第 30 行给出了错误。在请求中发送“password2”将修复此错误。
  • 在正文和架构中添加了密码 2,还在 is-empty.js 中添加了返回但我收到此错误 SyntaxError: Unexpected token '在 JSON 中的位置 143
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2019-04-24
相关资源
最近更新 更多