Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

worminer avatar worminer 104 Точки

Здравей.

а следкато не редиректва какво се случва ?

или се чупи нещо и ти излиза грешка в конзолата или не влиза в else -a който е на ред 98..

ако нищо не се чупи и не влиза в else то тогава е влязло в if-a което ще рече че този артикъл го няма записън като индекс в артикълите на самия потребител.. но тогава трябва да те пренасочва към страницата за изтриване(article/delete) и там да ти изписва съответната грешка..

Edit:понеже не би меше показало всички коментари чак сега видях,че вече е отговорено на този въпрос.. и май няма опция да си изтрия коментара.. 

0
16/11/2016 21:45:42
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Аз установих, че проблема не е с препращането. Не се изтриват артикълите от записите за юзъра в базата. и затова зацикля. Не може. Но порблемът е, че не знам как наботи това нещо изобщо.

Ето това е грешката:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'articles' of undefined

Ако заменя това:

let author = article.author;

с това:

let author = req.user

и това:

author.articles.splice(index, count);

с това:

User.findById(author._id, (err, author) => {
    author.articles.pull(id)

 

работи.

0
17/11/2016 07:37:00
worminer avatar worminer 104 Точки

Здравей,
на горния ред от това "let author = article.author;" ти имаш "Article.findOneAndRemove({_id: id}).populate('author').then(article => {" което на практика казва следното
Article.findOneAndRemove({_id: id}) : накарай моделът Article да намери първия срещнат резултат като го търси по ({_id: id}).. 
.populate('author') : и след като го намериш намери в него полето author и го попълни с данните за този author..
.then(article => { : и след като приключиш да правиш тия работи (понеже е асинхронно и не се знае кога ще се случи точно това) вземи тия данни които ми е ги е върнало предната функция и ги сложи в локална променлива article и изпълни кода в {}

let author = article.author; казва натъпчи ми в променливата author данните за автора article.author(което би трябвало да държи данните за автора ама явно не)
и ти го заменяш с това: let author = req.user; което казва , ами автора ти е сегашния юзър... което на практика не е добра идея защото ако сегашния юзър е Admin а article е на Pesho ..
затова ти после ти се налага да го търсиш точно на кого е тоя артикъл с този код:
User.findById(author._id, (err, author) => {
    author.articles.pull(id)
което мен специално ме навежда на мисълта че имаш нещо объркано в Article модела.. сега ще го огледам и него ама ще отнеме малко време :)

също така ти препоръчвам като правиш големи промени по моделите след това да изтриваш цялата база с данни и да си правиш юсерите и артикълите отначало .. понеже може да има някакви конфликти..

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Аз вече смених в гитхъб с правилното решение. Не се занимавай.

0
worminer avatar worminer 104 Точки

да видях го това :)
като гледам проблема беше в Article model
author: {type: mongoose.Schema.Types.ObjectId, required: true}, трябва да е

author: {type: mongoose.Schema.Types.ObjectId, required: true, ref: 'User'}

това ref: 'User'  напрактика казва на базата данни че това ид всъщност е ид от таблицата User (така наречената релация)

радвам се ,че сама си се справила :)
Приятен ден.

1
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Мдааа, точно там е бил проблемът, но за съжаление, не се справих сама :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.