用javascript制作一个put请求?

时间:2014-03-19 00:54:23

标签: javascript mongodb

我正在关注这个样板代码(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

中发送一个put请求的逻辑
// 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

1 个答案:

答案 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);
            }
        })
    },