средняя ошибка стека "неожиданный токен # json в позиции 0" - PullRequest
0 голосов
/ 04 мая 2018

Я хочу добавить функцию {follow} в свое приложение, взяв имя человека из URL.

Но я получаю эту ошибку:

SyntaxError: Неожиданный токен # в JSON в позиции 0
в JSON.parse ()
at createStrictSyntaxError (C: \ Users \ hathefa \ Desktop \ prozad \ node_modules \ body-parser \ lib \ types \ json.js: 157: 10)
at parse (C: \ Users \ hathefa \ Desktop \ prozad \ node_modules \ body-parser \ lib \ types \ json.js: 83: 15)
в C: \ Users \ hathefa \ Desktop \ prozad \ node_modules \ body-parser \ lib \ read.js: 121: 18
at invokeCallback (C: \ Users \ hathefa \ Desktop \ prozad \ node_modules \ raw-body \ index.js: 224: 16)
сделано (C: \ Users \ hathefa \ Desktop \ prozad \ node_modules \ raw-body \ index.js: 213: 7)
в IncomingMessage.onEnd (C: \ Users \ hathefa \ Desktop \ prozad \ node_modules \ raw-body \ index.js: 273: 7)
в IncomingMessage.emit (events.js: 160: 13)
at endReadableNT (_stream_readable.js: 1101: 12)
at process._tickCallback (internal / process / next_tick.js: 152: 19)

Я не знаю, в чем проблема.

Это HTML-код:

<form  class="btn btn-info btn-lg btn-block" (submit)="follow()">

                              <button type="submit" class="btn btn-info btn-lg btn-block"  [disabled]="FlowwersBy.indexOf(myUsername) > -1"> Follow</button>
                            </form>

Это угловой код:

follow(){
    this.authService.follow(this.username).subscribe(data =>{
      if(!data.success){
        this.messageClass = 'alert alert-danger'; // Set bootstrap error class
        this.message = data.message; // Set error message
        console.log('no');
      }else{
        this.messageClass = 'alert alert-success'; // Set bootstrap error class
        this.message = data.message; // Set error message
        console.log('yes');

      }
    });
  }

Это код услуги:

follow(user){
  this.createAuthenticationHeaders(); // Create headers before sending to API
  return this.http.put(this.domain + '/authentication/follow/',user, this.options).map(res => res.json());
}

Это код узла:

router.put('/follow',(req,res)=>{
    if(!req.body.username){
      res.json({success:false,message:'user not provided'});
      console.log(req.body.username);
    }else{
      User.findOne({username:req.body.username},(err,user)=>{
        if(!user){
          res.json({success:false,message:'user not found'});
        }else{
          if(!req.body.follower){
            res.json({success:false , message:'no follower provided'});
          }else{
            User.findOne({username:req.decoded.username},(err,follow)=>{
              if(!follow){
                res.json({success:false,message:'no follower was provided'});
              }else{
                if(user.FlowwersBy.includes(follow.username)){
                  res.json({success:false , message:"you alraedy follow him"});
                }else{

                  User.findByIdAndUpdate(user._id,
                  {
                    $push:{FlowwersBy:follow.username},
                    $inc:{Flowwers:1}
                  },
                  {
                    new: true
                  },
                  function(err,user){
                    if(err){
                      res.json({success:false, message:err});
                    }else{
                      //
                        User.findByIdAndUpdate(follow._id,
                        {
                          $push:{FlowwingBy:user.username},
                          $inc:{Flowwing:1}
                        },
                        {
                          new: true
                        },
                        function(err,follower){
                          if(err){
                            res.json({success:false, message:err});
                          }else{

                            res.json({success:true, message:'done'});
                            //res.json({user});
                          }
                        }
                      )
                      //
                    }
                  }
                )

                }
              }
            });
          }
        }
      });
    }
  });

Это код авторизации:

/ * ================================================== === MIDDLEWARE - используется для получения токена пользователя из заголовков ====================================================== * /

 router.use((req, res, next) => {
    const token = req.headers['authorization']; // Create token found in headers
    // Check if token was found in headers
    if (!token) {
      res.json({ success: false, message: 'No token provided' });  // Return error
    } else {
      // Verify the token is valid
      jwt.verify(token, config.secret, (err, decoded) => {
        // Check if error is expired or invalid
        if (err) {
          res.json({ success: false, message: 'Token invalid: ' + err }); // Return error for token validation
        } else {
          req.decoded = decoded; // Create global variable to use in any request beyond
          next(); // Exit middleware
        }
      });
    }
  });

когда я тестирую бэкэнд с почтальоном, он работает.

когда я открываю dev dev tool вкладку Networking. Это заголовки:

General:
Request URL: http://localhost:8080/authentication/follow/
Request Method: PUT
Status Code: 400 Bad Request
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
Response Headers:
Access-Control-Allow-Origin: http://localhost:4200
Connection: keep-alive
Content-Length: 1085
Content-Security-Policy: default-src 'self'
Content-Type: text/html; charset=utf-8
Date: Sat, 05 May 2018 06:11:42 GMT
Vary: Origin
X-Content-Type-Options: nosniff
X-Powered-By: Express
Request Headers:
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: ar,en-US;q=0.9,en;q=0.8,fr;q=0.7
authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1YWVjMWYwMzE2NDEwMzI3YmNkMmRiYmQiLCJpYXQiOjE1MjU1MDA0MjYsImV4cCI6MTUyNTU4NjgyNn0.ivwk4xWUJLNsYjx2lcV4U7JMO1Z8HOV-m-yNizIxiDk
Connection: keep-alive
Content-Length: 4
Content-Type: application/json
Host: localhost:8080
Origin: http://localhost:4200
Referer: http://localhost:4200/user/meme
User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Request Payload:
meme

и это URL:

http://localhost:4200/user/meme

Я исправил ошибку, проблема в том, что переменная, которую я отправлял на сервер, не была типа json, я выяснил это после того, как использовал средство Networking dev в chrome, спасибо "Kalamarico" за ваш совет.

Вот фиксированный код:

follow(username){
  this.createAuthenticationHeaders(); // Create headers before sending to API
  return this.http.put(this.domain + '/authentication/follow/',JSON.stringify({username}), this.options).map(res => res.json());
}

Все, что я сделал, это преобразовал переменную в объект json.

Надеюсь, что вы узнаете из моей ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...