Sunday 15 June 2014

node.js - Expressjs Turning Dynamic Uppercase and Spaced Route paths into Hyphenated and lowercase Routes -



node.js - Expressjs Turning Dynamic Uppercase and Spaced Route paths into Hyphenated and lowercase Routes -

i running issue trying utilize "title" property mongoosedb documents document path, of characters lowercase , spaces replaced hyphens. tried utilize solution before, wasn't able generate view , url's contained uppercase letters , %20 spaces.

here current setup focus on '/blog/:blogpost_title' route:

routes.js:

var express = require('express'); var router = express.router(); var blogdb = require('../config/blogdb.js'); var blogpost = require('./models/blogmodel.js'); var paginate = require('express-paginate'); //index router.use(paginate.middleware(10, 50)); router.route('/') // start method .get(function(req, res, next) { blogpost.paginate({}, req.query.page, req.query.limit, function(err, pagecount, blogpost, itemcount) { if (err) homecoming next(err) if (err) res.send(err); blogpost.title = req.body.title; // blog title blogpost.author = req.body.author; // author name blogpost.tagline = req.body.tagline; // tagline blogpost.content = req.body.content; // blog content blogpost.category = req.body.category; // category blogpost.tags = req.body.tags; // tags res.format({ html: function() { res.render('pages/index', { blogpost: blogpost, pagecount: pagecount, itemcount: itemcount }) }, json: function() { res.json({ object: 'blogpost', has_more: paginate.hasnextpages(req)(pagecount), data: blogpost }) } }); // end res.format(html, json) }); // end blogpost.paginate }); // end method router.route('/admin/posts/create') // start post method .post(function(req, res) { var blogpost = new blogpost(); // create new instance of blogpost model blogpost.title = req.body.title; // set blog title blogpost.author = req.body.author; // set author name blogpost.tagline = req.body.tagline; // set tagline blogpost.content = req.body.content; // set blog content blogpost.category = req.body.category; // set category blogpost.tags = req.body.tags; // set tags //save blog post blogpost.save(function(err) { if (err) res.send(err); res.redirect(303, '/'); //needs changed }); }) // end post method .get(function(req, res) { res.render('pages/blogpost-create'); }); function getsearchcriteria(params) { homecoming { title: params.blogpost_title }; } function getblogpostupdate(body) { homecoming { title: body.title, author: body.author, tagline: body.tagline, content: body.content, category: body.category, tags: body.tags }; } var blogpostsroute = router.route('/blog/:blogpost_title'); // manipulate route params, utilize router.param router.param('blogpost_title', function (req, res, next, blogpost_title) { req.params.blogpost_title = blogpost_title.tolowercase(); next(); }); blogpostsroute .get(function (req, res) { var searchcriteria = getsearchcriteria(req.params); blogpost.findone(searchcriteria, function (err, blogpost) { if (err) res.send(err); res.render('pages/blogpost', { blogpost: blogpost }) }) }) .put(function (req, res) { var searchcriteria = getsearchcriteria(req.params); var updated = getblogpostupdate(req.body) blogpost.findoneandupdate(searchcriteria, updated, function (err, updated) { if (err) res.send(err); res.json({ message: 'blog updated.' }); }); }) .delete(function (req, res) { var searchcriteria = getsearchcriteria(req.params); blogpost.findoneandremove(searchcriteria, function (err, removed) { if (err) res.send(err); res.json({ message: 'successfully deleted' }); }); }); //about router.get('/about', function(req, res) { res.render('pages/about'); }); //resume router.get('/resume', function(req, res) { res.render('pages/resume'); }); module.exports = router;

index.ejs:

<div class="grid"> <div class="col-9-12"> <div class="blog-content"> <% blogpost.foreach(function(blogpost) { %> <tr> <td><h2><a href="#" class="blog-title"><%= blogpost.title %></a></h2></td> <td><h3><%= blogpost.date %></h3></td> <td><h3 class="blog-category"><%= blogpost.category %></h3></td> <td><h3 class="blog-tagline"><i><%= blogpost.tagline %></i></h3></td> <td><p><%=: blogpost.content | truncate:800 | append:'...' %></p></td> <td><a href="/blog/<%= blogpost.title %>" class="blog-read-more">read more</a></td> </tr> <% }); %> </div> </div>

blogmodel.js

var mongoose = require('mongoose'); var mongoosepaginate = require('mongoose-paginate'); var schema = mongoose.schema; var blogpostschema = new schema({ title: string, author: string, tagline: string, category: string, content: string, tags: { type: string, lowercase: true }, date: { type: date, default: date.now } }); blogpostschema.plugin( mongoosepaginate ); var blogpost = mongoose.model("blogpost", blogpostschema); module.exports = mongoose.model('blogpost', blogpostschema);

node.js mongodb express routes

No comments:

Post a Comment