我正在尝试将评论功能添加到我的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
页面上提交评论表单时,实际上没有任何内容接受该页面尝试重新加载。在数据库中也没有任何东西得到保存。
表单参数从表单发送,因此在客户端一切都应该没问题。
我如何正确处理此帖子请求?
答案 0 :(得分:1)
您需要在每次return
调用之前添加res.send(500, ...);
语句,因为目前,如果出现错误,您的代码会尝试两次发送响应,并且客户端无法获得响应实际错误:
if (err) {
return res.send(500, { error: 'Database Error' });
}
... rest code
我怀疑,在db中保存任何内容的原因是请求体中的无效参数。