У меня есть маршрут, который добавляет изображение (мем), например:
// 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
в качестве значения.