Я хочу добавить функцию {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.
Надеюсь, что вы узнаете из моей ошибки.