无法正确处理Sails.js中的POST请求

时间:2017-09-12 10:04:43

标签: node.js post sails.js sails-mongo

我正在尝试将评论功能添加到我的Sails.js博客应用程序中。但是,我似乎没有正确地编写控制器动作。

当我提交评论表单时,页面开始重新加载,但没有完成重新加载。

这是我的控制器代码:

const gravatar = require('gravatar');

module.exports = {

    blog: (req, res) => {
        Post.find({}).exec((err, posts) => {
            if (err) {
                res.send(500, { error: 'Database Error' });
            }

            res.view('all-posts', { posts });
        });

    },

    singlePost: (req, res) => {
        Post.findOneBySlug(req.params.slug).exec((err, post) => {
            if (err) {
                res.send(500, { error: 'Database Error' });
            }

            res.view('single-post', {
                post,
                gravatar: gravatar.url
            });
        });
    },

addComment: (req, res) => {
    const {
        name, comment, email,
        url, slug,
    } = req.allParams();

    Post.findOneBySlug(slug).exec((err, post) => {
        if (err) {
            return res.send(500, { error: 'Database Error' });

            Comment.create({
                body: comment, name, email, website: url
            }).exec((error, comment) => {
                if (error) {
                    return res.send(500, { error: 'Database Error' });
                }
                console.log(comment);
                post.comments.addComment({slug, comment});
                post.save();

                res.redirect(`/${slug}`);
            });
        }
    });

    return false;
},

};

这是我的routes.js文件:

module.exports.routes = {
  'get /blog': 'BlogController.blog',

  'get /:slug': 'BlogController.singlePost',

  'post /:slug/new-comment': 'BlogController.addComment'
};

这是我的模型Post.js

module.exports = {

  identity: 'Post',

  attributes: {

    title: {
      type: 'string',
      required: true,
      unique: true
    },

    body: {
      type: 'string'
    },

    categories: {
      type: 'string',
      required: true
    },

    imageUrl: {
      type: 'string'
    },

    comments: {
      collection: 'Comment',
      via: 'post'
    },

    slug: {
      type: 'slug',
      from: 'title',
      blacklist: ['search', 'blog', 'contacts']
    }
  },

  addComment: (options, cb) => {
    Post.findOneBySlug(options.slug).exec((err, post) => {
      if (err) return cb(err);
      if (!post) return cb(new Error('Post not found.'));

      post.comments.add(options.comment);
      post.save(cb);
    })
  },

  connection: 'mongodb'
};

因此,当我在/:slug页面上提交评论表单时,实际上没有任何内容接受该页面尝试重新加载。在数据库中也没有任何东西得到保存。

表单参数从表单发送,因此在客户端一切都应该没问题。

我如何正确处理此帖子请求?

1 个答案:

答案 0 :(得分:1)

您需要在每次return调用之前添加res.send(500, ...);语句,因为目前,如果出现错误,您的代码会尝试两次发送响应,并且客户端无法获得响应实际错误:

if (err) {
  return res.send(500, { error: 'Database Error' });
}
... rest code

我怀疑,在db中保存任何内容的原因是请求体中的无效参数。