节点/快速路由问题 – 调用不正确的path

一切似乎工作正常,但是当试图达到“/职位/新”我得到“TypeError:无法读取属性'标题'的空引用'/ routes / posts.js:24'在'/:标题'GET方法。 任何想法为什么?

'路由/ posts.js'

var express = require('express'); var router = express.Router(); var mongoose = require('mongoose'); var Post = mongoose.model('posts'); /* posts displays*/ // posts index router.get('/', (req, res) => { Post.find((err, posts) => { res.render( 'posts/index', { title: 'Get All the Posts!', posts: posts } ); }); }); // single post router.get('/:title', (req, res) => { var query = {"title": req.params.title}; Post.findOne(query, (err, post) => { res.render( 'posts/post', { title: post.title, date: post.date, body: post.body } ); }); }); /* posts new */ router // GET new posts route and form .get('/new', (req, res) => { res.render('posts/new', { title: 'Add a new Post' }); }) // POST new post data .post('/new', (req, res) => { new Post({ title: req.body.title, date: req.body.date, body: req.body.body }) // Save post to db .save((err, post) => { res.redirect('/posts'); }); }); /* posts edit */ router // GET the post .get('/edit/:title', (req, res) => { var query = {'title': req.params.title}; Post.findOne(query, (err, post) => { res.render( 'posts/edit', { title: post.title, date: post.date, body: post.body } ); }); }) // PUT to update the post .put('/edit/:title', (req, res) => { var query = {'title': req.params.title}; var update = { title: req.body.title, body: req.body.body }; var options = {new: true}; Post.findOneAndUpdate(query, update, options, (err, post) => { res.render( 'posts/post', { title: post.title, date: post.date, body: post.body } ); }); }) // DELETE to delete a post .delete('/edit/:title', (req, res) => { var query = {'title': req.params.title}; Post.findOneAndRemove(query, (err, posts) => { res.redirect('/'); }) }); module.exports = router; 

Swig提供的'views / posts / new':

 {% extends '../layout.html' %} {% block title %}{% endblock %} {% block content %} <h1>{{ title }}</h1> <form method='post' action='/posts/new' class='form-posts'> <label>Title:</label> <input type="text" name='title' class='form-posts-text' required> <label>Body</label> <input type="text" name='body' class='form-posts-body' required> <button type='submit' class='btn-submit'>Submit</button> </form> {% endblock %} 

试着在generic /:title root之前放置/new路由。

因为/:title是首先定义的,如果它匹配(它会这样做)它会被首先调用。 由于您没有名称为“新”的post,因此您的数据库search空白。 你可能应该有一个error handling程序。 错误似乎是在title: post.title

如果首先定义/new ,它将被调用,如果匹配。 如果没有,更通用/:title将是。