我编写了一个(非常)简单的RESTFul Web服务,使用Node,Express和Mongoose从MongoDB中检索数据。
在服务器端,我有这段代码:
router.route('/products').post(function(req,res){
var product = new Product(req.body);
product.save(function(err){
if(err)
res.send(err);
res.send({message:'Product Added'});
});
当我从我的Ember客户端提交请求时,req.body包含以下内容:
{ attributes:
{ category: 1,
name: 'y',
price: 1,
active: false,
notes: null } }
属性名称与我的mongoose架构完全相同。我没有得到任何错误,但在MongoDB中创建的文档是空的(只需获取_id和__v字段)。
我做错了什么。我应该将req.body进一步转换成???
答案 0 :(得分:0)
有助于调试的一些事情:
1)从快速浏览(我以前没有使用过mongoose)看起来像传递给save的回调函数需要两个参数。
2)我不知道您的代码是否被截断,但上面的示例缺少匹配的});
3)我错误地使功能短路,所以你不会看到'添加产品',除非确实如此。
尝试这些修补程序。
router.route('/products').post(function(req,res){
var product = new Product(req.body);
product.save(function(err, product){
if(err){
return res.send(err);
}
return res.send({message:'Product Added'});
});
});
答案 1 :(得分:0)
这个问题与我对Ember和Node + Express不熟悉有关。服务器中收到的数据与我最初指出的数据略有不同:(第一行缺失)
{ product:
{ attributes:
{ category: ... } } }
在服务器端,我可以使用req.body.product.attributes
(而非req.body
)访问我的数据:
router.route('/products').post(function(req,res){
var product = new Product(req.body.product.attributes);
product.save(function(err){
if(err)
res.send(err);
res.send({message:'Product Added'});
});