Мой идентификатор элемента Mongo не проталкивается через REST API - PullRequest
0 голосов
/ 20 марта 2019

Так что я работаю над сайтом блога для класса. Мой проект заключается в создании REST API для сайта блога. Я могу получить все для отображения из базы данных через представления .ejs. Моя проблема в том, что единственное, чего не добиваются, это когда мне нужен blogID, чтобы обновить этот конкретный блог кнопкой отправки. Кто-нибудь может посмотреть на мой код и помочь мне? Я был на этом в течение 6 дней, Google и тестирование. Благодарю.

<form method="put" action="/blogedit/<%= blogData.blogid %>" style="padding: 20px;">
    <div class="form-group">
      <label for="blogTitle"  class="text-dark">
          Blog Title
      </label>
      <input class="form-control"  id="blogTitle" name="blogTitle" value="<%= blogData.blogTitle %>">
          <label for="blogText" class="text-dark" style="width: 100%;">
              Blog Text
          </label>
          <input class="form-control" id="blogText" name="blogText" value="<%= blogData.blogText %>"></textarea>
           </div>
         <input type="submit" class="btn btn-dark" value="Save">
      </div>
   </form>

Выше мой HTML для формы, которую я пытаюсь отправить.

/*GET BLOG EDIT PAGE*/
module.exports.readOne = function (req, res) {
    var requestOptions, path;
    path = "/api/blog/" + req.params.blogid;
    requestOptions = {
        url: apiOptions.server + path,
        method: "GET",
        json: {}
    };
    request(
        requestOptions,
        function (err, response, body) {
            if (err) {
                console.log(err);
            } else {
                console.log(response.statusCode);
                renderBlogEdit(req, res, body);
            }
        }
    );
};

/*Render BLOG EDIT PAGE */
var renderBlogEdit = function (req, res, blogData) {
    res.render('blogedit', {
        title: 'Edit Blog',
        pageHeader: {
            title: 'Edit Blog'
        },
        blogData: blogData,
        blogid: blogData._id,
        blogTitle: blogData.blogTitle,
        blogText: blogData.blogText
    });
};
/*Blog Edit Post*/
module.exports.editPost = function (req, res) {
    var requestOptions, path, postdata;
    path = '/api/blog/' + req.params.blogid;

    postdata = {
        blogTitle: req.body.blogTitle,
        blogText: req.body.blogText
    };

    requestOptions = {
        url: apiOptions.server + path,
        method: "PUT",
        json: postdata
    };
    request(
        requestOptions,
        function (err, response, body) {
            if (response.statusCode === 201) {
                res.redirect('/bloglist');
            } else {
                _showError(req, res, response.statusCode);
            }
        }
    );
};

Это мой контроллер app_server для редактирования блога, а ниже будет моя функция app_api для редактирования блога.

module.exports.readOne = function (req, res) {
    console.log('Finding blogs', req.params);
    if (req.params && req.params.blogid) {
        blogSch
            .findById(req.params.blogid)
            .exec(function (err, blog) {
                if (!blog) {
                    sendJsonResponse(res, 404, {
                        "message": "blogid not found"
                    });
                    return;
                } else if (err) {
                    console.log(err);
                    sendJsonResponse(res, 404, err);
                    return;
                }
                console.log(blog);
                sendJsonResponse(res, 200, blog);
            });
    } else {
        console.log('No blogid in request');
        sendJsonResponse(res, 404, {
            "message": "No blogid in request"
        });
    }
};

module.exports.editOne = function (req, res) {
    console.log("Updating Blog Entry : " + req.params.blogid);
    console.log(req.body);
    blogSch.findOneAndUpdate(
        { _id: req.params.blogid },
        { $set: { "blogTitle": req.body.blogTitle } },
        { $set: { "blogText": req.body.blogText } },
        function (err, response) {
            if (err) {
                sendJsonResponse(res, 400, err);
            } else {
                sendJsonResponse(res, 201, response);
            }
        }
    );
};

Любая помощь очень ценится. Для большей ясности, когда нажимается кнопка «Отправить» в форме, я просто получаю сообщение об ошибке 404, так как страница не найдена. Большое спасибо!

1 Ответ

0 голосов
/ 20 марта 2019

На первый взгляд у вас недействительный HTML для вашей формы.Форма HTML5 может иметь только методы «POST» и «GET».Поскольку PUT является недействительным, форма обрабатывается как запрос GET, который дает вам страницу 404.

Измените код, чтобы использовать POST как в форме HTML5, так и на сервере.

...