Почему в этом случае JQuery приводит строку к _id для Mongodb? (Пожалуйста, прочитайте РЕДАКТИРОВАТЬ) - PullRequest
0 голосов
/ 04 мая 2018

У меня есть маршрут, который добавляет изображение (мем), например:

// add new image by URL
app.post('/api/addMeme', function (req, res) {
    var meme = new Meme({
        title: req.body.title.trim().toLowerCase(),
        image: req.body.image,
        meta: {
            votes: 0,
            favs: 0
        },
        related: []
    });

    // Save meme to database
    meme.save(function (err) {
        if (err) throw err;
        Meme.find({}, function (err, meme) {
            if (err) throw err;
            io.emit('new meme', meme);
        });
        res.send('Succesfully inserted meme.');
    });
});

Он принимает только два атрибута title и image, заданные клиентской стороной ajax, и добавляет его в мою Mongodb базу данных с именем Meme. Создайте обновленную базу данных, используя socket.io. Оба типа title и image относятся к типу String. image предполагается, что это URL-адрес изображения.

Теперь мне не стыдно это признать, но мой друг прокрутил мой сайт и отправил image = "www.pornhub.com" по этому маршруту, и он разбил мою базу данных / сайт. Всякий раз, когда я иду и пытаюсь получить изображение по _id, я получаю ошибку:

CastError: Cast to ObjectId failed for value "www.pornhub.com" at path "_id" for model "meme"

РЕДАКТИРОВАТЬ: похоже, что ошибка на самом деле исходит от маршрута

app.post('/api/vote', function(req, res){
    Meme.findOneAndUpdate({_id: req.body.id}, {$inc : {'meta.votes' : 1}}, {new: true}, function (err, meme) {
        if (err) throw err;
        if (!meme) return res.send('No meme found with that ID.');
        io.emit('new vote', meme);
        res.send('Succesfully voted meme.');
    });
});

, где запрос POST обновляет базу данных, и есть ошибка приведения, где _id задается в виде строки?

Клиентский скрипт, который делает это,

$("#vote").click(function(){
    $.ajax({
        type: "POST",
        url: '/api/vote',
        data: {
            id: App.meme._id
        },
        success: function (data, status) {
            console.log(data);
        }
    });
    return false;
}); 

, где App - это Express-state открытые данные, для которых meme, база данных, живет под.

Но эта ошибка возникает ТОЛЬКО на объекте с image = "www.pornhub.com". Я предполагаю, что где-то в HTML кросс-сайт href посещает www.pornhub.com и как-то App искажается? Не совсем понятно, почему id: App.meme._id даст www.pornhub.com в качестве значения.

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