Я получаю ошибку проверки на моем маленьком сайте, связанном с путешествиями, который я установил в течение года go. У меня не было проблем при создании начальных сообщений, но теперь, после длительного перерыва в добавлении чего-либо на сайт, я получаю ошибки всякий раз, когда пытаюсь добавить или изменить сообщение. Единственное, о чем я могу подумать, может быть, что-то было обновлено в mon goose или MongoDB или что-то еще. Я знаю только то, что я знаю о webDev, из того, что я узнал, наблюдая за полным стеком курса webDev по Udemy, и как бы информативно он ни был, я знаю только, как сделать что-то, как они показали в курсе. Я много раз искал и нашел ряд вопросов с validationErrors, но ни одно из решений, похоже, не решает проблему, с которой я столкнулся, так как все это работало, и в моем коде не было никаких изменений с тех пор, как я в последний раз использовал веб-сайт.
Вот мой журнал ошибок от Heroku:
Error [ValidationError]: Travel validation failed: tags: Cast to String failed for value "[ 'e' ]" at path "tags"
2020-01-29T04:49:40.091426+00:00 app[web.1]: at ValidationError.inspect (/app/node_modules/mongoose/lib/error/validation.js:61:24)
2020-01-29T04:49:40.091429+00:00 app[web.1]: at formatValue (internal/util/inspect.js:563:31)
2020-01-29T04:49:40.091432+00:00 app[web.1]: at inspect (internal/util/inspect.js:221:10)
2020-01-29T04:49:40.091434+00:00 app[web.1]: at formatWithOptions (internal/util/inspect.js:1693:40)
2020-01-29T04:49:40.091437+00:00 app[web.1]: at Object.Console.<computed> (internal/console/constructor.js:272:10)
2020-01-29T04:49:40.091439+00:00 app[web.1]: at Object.log (internal/console/constructor.js:282:61)
2020-01-29T04:49:40.091442+00:00 app[web.1]: at /app/routes/travels.js:137:21
2020-01-29T04:49:40.091444+00:00 app[web.1]: at /app/node_modules/mongoose/lib/utils.js:268:11
2020-01-29T04:49:40.091446+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4810:21
2020-01-29T04:49:40.091448+00:00 app[web.1]: at _done (/app/node_modules/mongoose/lib/model.js:3101:16)
2020-01-29T04:49:40.091450+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:3116:18
2020-01-29T04:49:40.091453+00:00 app[web.1]: at callbackWrapper (/app/node_modules/mongoose/lib/model.js:3070:20)
2020-01-29T04:49:40.091455+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4791:16
2020-01-29T04:49:40.091456+00:00 app[web.1]: at /app/node_modules/mongoose/lib/utils.js:268:11
2020-01-29T04:49:40.091458+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4810:21
2020-01-29T04:49:40.091459+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:485:16 {
2020-01-29T04:49:40.091461+00:00 app[web.1]: errors: {
2020-01-29T04:49:40.091463+00:00 app[web.1]: tags: MongooseError [CastError]: Cast to String failed for value "[ 'e' ]" at path "tags"
2020-01-29T04:49:40.091464+00:00 app[web.1]: at new CastError (/app/node_modules/mongoose/lib/error/cast.js:39:11)
2020-01-29T04:49:40.091466+00:00 app[web.1]: at model.$set (/app/node_modules/mongoose/lib/document.js:1201:9)
2020-01-29T04:49:40.091467+00:00 app[web.1]: at model._handleIndex (/app/node_modules/mongoose/lib/document.js:935:14)
2020-01-29T04:49:40.091469+00:00 app[web.1]: at model.$set (/app/node_modules/mongoose/lib/document.js:879:22)
2020-01-29T04:49:40.091471+00:00 app[web.1]: at model.Document (/app/node_modules/mongoose/lib/document.js:137:12)
2020-01-29T04:49:40.091473+00:00 app[web.1]: at model.Model (/app/node_modules/mongoose/lib/model.js:102:12)
2020-01-29T04:49:40.091474+00:00 app[web.1]: at new model (/app/node_modules/mongoose/lib/model.js:4611:15)
2020-01-29T04:49:40.091476+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:3077:22
2020-01-29T04:49:40.091477+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:3113:7
2020-01-29T04:49:40.091479+00:00 app[web.1]: at Array.forEach (<anonymous>)
2020-01-29T04:49:40.091480+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:3112:15
2020-01-29T04:49:40.091482+00:00 app[web.1]: at Object.promiseOrCallback (/app/node_modules/mongoose/lib/utils.js:261:12)
2020-01-29T04:49:40.091483+00:00 app[web.1]: at Function.create (/app/node_modules/mongoose/lib/model.js:3047:16)
2020-01-29T04:49:40.091485+00:00 app[web.1]: at /app/routes/travels.js:135:12
2020-01-29T04:49:40.091493+00:00 app[web.1]: at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
2020-01-29T04:49:40.091494+00:00 app[web.1]: at next (/app/node_modules/express/lib/router/route.js:137:13) {
2020-01-29T04:49:40.091496+00:00 app[web.1]: stringValue: `"[ 'e' ]"`,
2020-01-29T04:49:40.091497+00:00 app[web.1]: kind: 'String',
2020-01-29T04:49:40.091499+00:00 app[web.1]: value: [Array],
2020-01-29T04:49:40.091500+00:00 app[web.1]: path: 'tags',
2020-01-29T04:49:40.091502+00:00 app[web.1]: reason: [MongooseError],
2020-01-29T04:49:40.091503+00:00 app[web.1]: message: `Cast to String failed for value "[ 'e' ]" at path "tags"`,
2020-01-29T04:49:40.091505+00:00 app[web.1]: name: 'CastError'
2020-01-29T04:49:40.091506+00:00 app[web.1]: }
2020-01-29T04:49:40.091507+00:00 app[web.1]: },
2020-01-29T04:49:40.091509+00:00 app[web.1]: _message: 'Travel validation failed',
2020-01-29T04:49:40.091511+00:00 app[web.1]: name: 'ValidationError'
2020-01-29T04:49:40.091512+00:00 app[web.1]: }
Вот моя схема для ввода "путешествия":
var mongoose = require("mongoose");
var reviewPhoto = new mongoose.Schema({
imgUrl: String,
info: String
});
var travelSchema = new mongoose.Schema({
name: String,
category: String,
tags: String,
splashText: String,
body: String,
adRight: String,
photos: [ reviewPhoto ]
}, { timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } }
);
module.exports = mongoose.model("Travel", travelSchema);
Вот мой e js с моей формой путешествия, в которую я вношу свои данные при создании нового путешествия. Есть способ добавить больше reviewPhoto на сайт, который добавляет дополнительные записи в массив фотографий, но этот код не включен, так как это не должно быть частью проблемы:
<form action="/travel_new" method="POST">
<div id="reviewLeft">
<input type="text" name="travel[name]" placeholder="Travel Title" required>
<input type="text" name="travel[splashText]" placeholder="Splash Text" required>
<input type="text" name="travel[category]" placeholder="Category: ex: Park - Campground - Monument" required>
<input type="text" name="travel[tags]" id="tagField" placeholder="Tags - separate tags by a comma ex: sunset,national park,sky" required>
<input type="text" name="travel[adRight]" placeholder="need Ad Target url and the image Banner Url separated by comma , use none for no ad" required>
<textarea id="txDescription" name="travel[body]" placeholder='Start Article' required></textarea>
</div>
<div id="reviewRight" class="style-10">
<div class="border">
<input type="text" name="reviewPhoto[0][imgUrl]" placeholder="photo url" required>
<input type="text" name="reviewPhoto[0][info]" placeholder="photo Info" required>
</div>
</div>
<input id="submitBtn" type="submit">
</form>
А вот мой код на моем node.js сервере для почтового маршрута для создания новой записи путешествия:
router.post("/travel_new", isLoggedIn, function(req, res){
var name = req.body.travel.name;
var category = req.body.travel.category || "default";
var tags = req.body.travel.tags;
var splash = req.body.travel.splashText;
var body = req.body.travel.body;
var adRight = req.body.travel.adRight || "none";
var photos = req.body.reviewPhoto;
tags = tags.split(",");
//Assemble a variable to send all the review data into the create function for the SCHEMA pattern
var newTravel = { name: name, category: category, tags: tags, splashText: splash, body: body, adRight: adRight, photos: photos };
Travel.create( newTravel, function(err, travel){
if(err){
console.log(err);
res.redirect("travel/new");
}else{
// console.log(travel);
res.redirect("travel");
}
});
});
А вот мой пакет. json файл, если он поможет.
{
"name": "travelSite",
"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"body-parser": "^1.18.3",
"ejs": "^2.6.1",
"express": "^4.16.4",
"express-session": "^1.15.6",
"helmet": "^3.15.0",
"method-override": "^3.0.0",
"mongoose": "^5.3.12",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"passport-local-mongoose": "^5.0.1"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node app.js"
},
"author": "",
"license": "ISC"
}
Что меня очень смущает, так это то, что на сайте есть еще одна область, где я могу добавить новую фотографию, и у каждой фотографии есть заголовок, описание и теги, которые я введите, и все это использует почти идентичный код для сохранения и обновления на mongoDB, а раздел фотографий на сайте по-прежнему работает нормально. Это только область, чтобы добавить путешествия. Все это было написано в одно и то же время, и все работало, и теперь, спустя 9 месяцев или около того, не работают только определенные части сайта. Все данные, которые уже находятся в MongoDB, прекрасно загружаются на веб-сайт, все введенные поездки - все загружаются и отображаются нормально, поэтому я знаю, что нет проблем с подключением к MongoDB, и при этом он не поврежден. Кажется, что сообщение об ошибке показывает что-то вроде того, что он пытается преобразовать массив в строку, переменная tags должна быть массивом строк, если я не забуду. Это проблема, когда написание веб-кода - это не ваша настоящая работа, а хобби, которое приходит и уходит каждые 6 месяцев. Я забыл большую часть того, что я узнал, и мне приходится много раз учиться каждый раз, когда у меня появляется время написать еще какой-нибудь веб-код.!
Спасибо за любую помощь, которая может быть оказана.
E