Ошибка разбора запроса PUT

0

У меня есть сайт, на котором пользователь хранит ресурсы и создает статьи о них. В настоящее время я создаю раздел комментариев, в котором пользователи могут делать комментарии в статьях. У меня есть запрос put, который запускается от контроллера, который отправляет идентификатор статьи и комментарий.

но я получаю следующую ошибку,

SyntaxError: Unexpected token 1
    at parse (/home/themis/webappionio/node_modules/body-parser/lib/types/json.js:83:15)
    at /home/themis/webappionio/node_modules/body-parser/lib/read.js:116:18
    at invokeCallback (/home/themis/webappionio/node_modules/raw-body/index.js:262:16)
    at done (/home/themis/webappionio/node_modules/raw-body/index.js:251:7)
    at IncomingMessage.onEnd (/home/themis/webappionio/node_modules/raw-body/index.js:308:7)
    at emitNone (events.js:67:13)
    at IncomingMessage.emit (events.js:166:7)
    at endReadableNT (_stream_readable.js:905:12)
    at doNTCallback2 (node.js:441:9)
    at process._tickCallback (node.js:355:17)

вот мой server.js:

//defining Articles Model

var ArticleSchema = mongoose.Schema({
    _creatorname: String,
     title : String,
     body : String,
     resource: String,
     published : String,
     comments: [{
         _commentorname: String,
          content : String,
          date : String
     }]
 });

var Articles = mongoose.model("Articles", ArticleSchema);

//pushing comment into the specific article

app.put("/home/:id", function(req,res){
    var _commentorname = req.user.username;
    var content = req.body.comment;
    var date = moment().tz("Europe/Athens").format("DD/MM/YY HH:mm");
    Articles.findByIdAndUpdate(
        id, 
        {$push: {"comments" : {_commentorname: _commentorname, content: content, date: date}}},
        {safe: true, upsert: true, new : true}, 
        function(err, article) {
                console.log(err);
       }
    );
});

Мой контроллер:

$scope.addComment = function(id, comment) {
        console.log(id);
        console.log(comment);
        $http.put("/home/" + id, comment)
        .success(function(response){
            $scope.all();
        });
    };

и мою html-форму:

<div class="panel-footer">
                        <input type="text" id="userComment" ng-model="comment" class="form-control input-sm chat-input" placeholder="Write your message here..." />
                        <span class="input-group-btn">     
                            <button class="btn btn-primary btn-sm" ng-click="addComment(article._id, comment)"><span class="glyphicon glyphicon-comment"></span> Add Comment</button>
                        </span>

                    </div>

Вот мой окончательный server.js

app.put("/home/:id", function(req,res){
    var id = req.params.id;
    Articles.findByIdAndUpdate(
        id, 
        {$push: {"comments" : {_commentorname: req.user.username, content:req.body.comment}}},
        {safe: true, upsert: true, new : true}, 
        function (err, results) {
            if (err) 
            {
                res.send("there was a problem updating the information: " + err);
            }
            else {
                res.format({
                    json: function() {
                        res.json(results);
                    }
                });
            }
        }
    );
});
  • 1
    Было бы полезно, если бы вы научились немного лучше интерпретировать трассировки стеков. Источник ошибки исходит из "анализатора тела", что означает, что отформатированный отправляемый JSON имеет структурную ошибку. Это также помогает понять, что тот факт, что ваш «проект» использует различные технологические компоненты в стеке, не означает, что ваша «проблема» или «вопрос» здесь включает «все» из них. Как правило, ожидается, что вы сначала сузите все это, спросите и пометите соответствующим образом.

2 ответа

1
Лучший ответ

Проблема в том, что comment здесь фактически не отправляется как Object а как "строка". Поэтому вам нужно структурировать Object.

Поэтому исправьте код углового контроллера:

$scope.addComment = function(id, comment) {
        console.log(id);
        console.log(comment);
        $http.put("/home/" + id, { "comment": comment})
        .success(function(response){
            $scope.all();
        });
    };
  • 0
    @ExWei Вы также ошиблись в предположении и сказали, что ошиблись
  • 0
    хорошо, это сработало: я толкнул объект, как сказал Блейк выше. я выдвинул все, что хотел, кроме формата даты, который, если я пытаюсь также подтолкнуть дату, вообще ничего не выдвинул
Показать ещё 1 комментарий
-1

Новый ответ:

На самом деле похоже, что вы отправляете в Angular controller переменную комментариев в "сырой" форме вместо отправки ее как JSON, вам нужно изменить ее на

$scope.addComment = function(id, comment) {
        console.log(id);
        console.log(comment);
        $http.put("/home/" + id, {comment: comment})
        .success(function(response){
            $scope.all();
        });
    };

Старый ответ:

Я думаю, что это порождает ошибку, потому что вы форматируете дату в необычный формат "DD/MM/YY HH: mm", если вы будете использовать собственный объект JS, он будет работать, например

var date = moment().tz("Europe/Athens").toDate()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню