function newSlugValidator(place, next){ place.slug = slugify(place.title); Place.count({ slug: place.slug }).then( count => { if( count > 0){ place.slug = place.slug + '-' + count; } next(); }); }
-
check_circle_outlineMódulo 1 | 7 clases
Introducción
expand_more -
check_circle_outlineMódulo 2 | 6 clases
Conceptos Fundamentales
expand_more -
check_circle_outlineMódulo 3 | 10 clases
Bases de Datos y CRUDs
expand_more -
check_circle_outlineMódulo 4 | 15 clases
Más allá de lo básico
expand_more-
done_all
Clase 1
Crear rutas
-
done_all
Clase 2
Controladores
-
done_all
Clase 3
Paginación
-
done_all
Clase 4
Qué es un Middleware en Express
-
done_all
Clase 5
Middleware para búsqueda individual
-
done_all
Clase 6
Configurar cloudinary
-
done_all
Clase 7
Definir archivo con secretos
-
done_all
Clase 8
Subir imágenes a cloud
-
done_all
Clase 9
Subir imágenes pt 2
-
done_all
Clase 10
Mover imágenes a la nube
-
done_all
Clase 11
Guardar información de las imágenes en la base de datos
-
done_all
Clase 12
Generar SEO URLs
-
done_all
Clase 13
Evitar colisiones con las SEO URls
-
done_all
Clase 14
Cambiar búsqueda de ID a Slug
-
done_all
Clase 15
Manejo de parámetros
-
-
check_circle_outlineMódulo 5 | 6 clases
Autenticación de usuarios
expand_more -
check_circle_outlineMódulo 6 | 5 clases
Relaciones básicas uno a muchos
expand_more -
check_circle_outlineMódulo 7 | 9 clases
Relaciones muchos a muchos
expand_more -
check_circle_outlineMódulo 8 | 11 clases
Seguridad en servicios web
expand_more
6 comentario(s)
Creo que no es necesario hacer una función recursiva. El primer valor count devuelto por mongoose puede ser añadido al slug y ser guardado. Si existieran 100 lugares con el mismo nombre, se realizarían 100 llamadas a la base y eso no sería óptimo. Podría llamar la función siguiente dentro del hook save de placeSchema
Una ayudita please, cuando se genera el post, genera bien hasta el "-1", luego de eso aveces aparece el slug sin número, creo tener el código tal como sale en el video, porfavor ayuda...
placeSchema.pre('save', function(next){
placeSchema.pre('save', function(next){
generateSlugAndContinue.call(this,0,next);
next();
})
placeSchema.statics.validateSlugCount = function(slug) {
return Place.countDocuments({slug: slug}).then(count => {
if(count > 0) return false;
return true;
})
}
placeSchema.plugin(mongoosePaginate);
function generateSlugAndContinue(count, next) {
//Vamos a tomar el titulo del objeto y lo vamos a convertir en un slug.
this.slug = slugify(this.title);
if (count != 0)
this.slug = this.slug + "-"+count;
Place.validateSlugCount(this.slug).then(isValid => {
if(!isValid)
return generateSlugAndContinue.call(this,count+1,next);
next();
})
}
Saludos!! al día de hoy existe una nueva versión de mongoose, por lo tanto al usar el count sale un warning que se corrige reempalzando por
countDocuments
placeSchema.statics.validateSlugCount = function(slug){ Place.countDocuments({slug:slug}).then(count=>{ if (count > 0) return false; return true; }); }
No sé exactamente el por qué y si también ocurra con el código del video, pero si envío la petición varias veces consecutivas a una gran velocidad me aparece la siguiente respuesta:
{ "message": "Can't save() the same doc multiple times in parallel. Document: 5be94641ada02233f83f025a", "name": "ParallelSaveError" }
No he podido dar una solución a este posible problema y no sé qué hacer. Este es mi código. Muchas gracias!
function generateSlugAndContinue(id,next) { this.slug = slugify(this.title); if(id != 0) this.slug = this.slug + '-' + id; Place.countDocuments({slug:this.slug}) .then(cantidad => { if(cantidad != 0) return generateSlugAndContinue.call(this,id + 1, next); next(); }) ; }
Buen día.
desde que realice el video de SEO Url, me salia un error de clave duplicada con el dato slug del modelo place, después de buscar en Internet e intentar varias cosas, lo único que me ayudo fue eliminar la base de datos después de eso me funciono, la pregunta es, por que tuve que eliminar la base de datos para que funcionara?
desde que realice el video de SEO Url, me salia un error de clave duplicada con el dato slug del modelo place, después de buscar en Internet e intentar varias cosas, lo único que me ayudo fue eliminar la base de datos después de eso me funciono, la pregunta es, por que tuve que eliminar la base de datos para que funcionara?
cuando retornas la funcion generateSlugAndContinue(count+1,next)
dentro de es misma funcion me pierdo completamente
estoy haciendo pruebas y no me sale nada,no entiendo ese funcionamiento
dentro de es misma funcion me pierdo completamente
estoy haciendo pruebas y no me sale nada,no entiendo ese funcionamiento
Clase 30