我正在关注这个样板代码(https://github.com/jkat98/benm)我已经把结构挂起了很好,我喜欢它。作者没有向mongodb服务器包含更新方法/ PUT请求。他说这一步有点复杂,所以我希望能向您展示向服务器发送数据的主要路由和逻辑,并可能获得一些实现PUT请求的帮助。
所以在我看来,这里有3或4个关键文件可以实现神奇的效果。
一个。在app/models.js
中,定义mongodb的模型。
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var Message = new Schema({
username: { type: String },
message: { type: String },
connected: { type: Boolean },
sent: { type: Date, default: Date.now }
});
module.exports = {
Message: mongoose.model('Message', Message)
};
B中。在app/routes.js
创建api的路由。
var home = require('../controllers/home'),
messages = require('../controllers/messages');
module.exports.initialize = function(app) {
app.get('/', home.index);
// Messages
app.get('/api/messages', messages.index);
app.get('/api/messages/:id', messages.getById);
app.post('/api/messages', messages.add);
// Having a hard time with the PUT request
app.put('/api/messages', messages.update);
app.delete('/api/messages/:id', messages.delete);
};
℃。在controllers/messages.js
控制器中。
var models = require('../app/models'),
md5 = require('MD5');
module.exports = {
index: function(req, res) {
models.Message.find({}, function(err, data) {
res.json(data);
console.log(data);
});
},
getById: function(req, res) {
models.Message.find({ _id: req.params.id }, function(err, message) {
if(err)
res.json({error: 'Message not found.'});
res.json(message);
});
},
add: function(req, res) {
var newMessage = new models.Message(req.body);
newMessage.save(function(err, message) {
if (err)
res.json({});
console.log('successfully inserted message: ' + message._id);
res.json(message);
});
},
// Again hard time with this method
update: function(req, res) {
console.log(req.body);
models.Message.update({ _id: req.body.id }, req.body, function(err, updated) {
if (err) {
res.json({error: 'Message not found.'});
} else {
res.json(updated);
}
})
},
delete: function(req, res) {
models.Message.findOne({ _id: req.params.id }, function(err, message) {
if (err) {
res.json({error: 'Message not found.'});
} else {
message.remove(function(err, message){
res.json(200, {status: 'Success'});
})
}
});
}
};
d。最后在client/src/views/I_HAVE_A_CUSTOM_VIEW.js
// Okay so my code is slightly different than the boilerplate but the idea is to
// update a model in the collection kind of like the method below
// the method below does fire off a PUT request, but returns an error since
// my update/PUT logic is not correct
createMessage: function(data) {
var model = window.App.data.messages.where({username: data.username})
_.each(model, function(model) {
console.log(model.get('_id'));
model.set({message: data.message})
model.save({}, {url:'/api/messages/'+model.get('_id')})
});
//window.App.data.messages.create(newMessage);
window.App.core.vent.trigger('app:log', 'Add View: Saved new message!');
}
所以这可能是一个棘手的问题,但基本上我只需要一些帮助,找出如何在控制器中编写更新方法,以便我可以成功更新mongodb中的文档。
编辑:作者说他没有实施PUT请求以及为什么https://github.com/jkat98/benm/issues/12
答案 0 :(得分:0)
您只需添加要更新的字段即可。像这样(我只是更新用户名):
update: function(req, res) {
console.log(req.body);
models.Message.update({ _id: req.body.id }, req.body, function(err, message) {
if (err) {
res.json({error: 'Message not found.'});
} else {
message.username = req.body.username;
message.save();
res.json(message);
}
})
},