AngularJS + NodeJS - >如何以正确的方式保存JSON请求?

时间:2015-02-19 22:02:55

标签: javascript json angularjs node.js mongodb

我在AngularJS app中有以下工厂:

angular.module('MyApp')
    .factory('MessageHistory', ['$resource', 'serverUrl', function ($resource, serverUrl) {
        return $resource(serverUrl, {
            messageId: "@_id"
        }, {
            'get': {
                method: 'GET',
                url: serverUrl + '/api/history/:messageId',
                params: {
                    messageId: '@_id'
                }
            },
            'save': {
                method: 'POST',
                url: serverUrl + '/api/history',
            },
            'query': {method: 'GET', isArray: true},
            'remove': {method: 'DELETE'},
            'delete': {method: 'DELETE'}
        });
    }]);
enter code here

在控制器中遵循以下代码:

$scope.saveMessageHistory = function (changes) {
                    console.log("SAVING");
                    MessageHistory.save(
                        {
                            messageId: $scope.messageId._id,
                            userId: $rootScope.currentUser._id,
                            changes: JSON.stringify(changes),
                            dateTime: new Date()
                        }, function (changes) {
                            // update scope
                            $scope.messageChanges = changes;
                        });
                };

在服务器端,我有以下代码:

 app.get('/api/history', authenticationServer.ensureAuthenticated, function (req, res, next) {
        MessageChange.find().exec(function (err, changes) {
            if (err)
                res.status(404).end();
            else
                res.status(200).send(changes);
        });
    });

    app.get('/api/history/:messageId', authenticationServer.ensureAuthenticated, function (req, res, next) {
        MessageChange.findById(req.params.messageId, function (err, change) {
            res.status(200).send(change);
        });
    });

    app.post('/api/history', authenticationServer.ensureAuthenticated, function (req, res, next) {
        var messageChange = new MessageChange(req.body);
        messageChange.save(function (err, change) {
            if (err)
                res.status(404).end();
            else
                res.status(200).send(change);
        });
    });

表的架构如下:

var mongoose = require('mongoose');
module.exports.messageChangeSchema = new mongoose.Schema({
    messageId: {
        type: mongoose.Schema.Types.ObjectId, ref: 'Message'
    },
    userId: {
        type: mongoose.Schema.Types.ObjectId, ref: 'User'
    },
    changes: {
        type: String,
        default: 'default'
    },
    dateTime: {
        type: Date
    }
});

问题是,如果我试图通过POST请求保存更改,我总是获得状态200但没有保存任何内容:

请求如下:

{
    "taskId": "54cd198fxcwwae7b681",
    "userId": "54cbc1dcs93dwccd7d41a9a8fff",
    "changes": "[{\"Property\":\"this.description\",\"valueBefore\":\"TEST\",\"valueAfter\":\"TEST123\"}]",
    "dateTime": "2015-02-19T21:42:15.901Z"
}

保存请求的网址:

http://localhost:3000/api/history

似乎工作正常,但我无法通过GET请求获得保存的结果。

http://localhost:3000/api/history/54cd198f892962626ae7b681

我总是得到状态200,空响应。 我想在没有记录的情况下得到空数组。

我想问一下我该如何正确地做到这一点?

如果我应该改进POST请求,我欢迎任何建议。

感谢您的任何建议。

修改 我使用以下代码解决了GET请求:

app.get('/api/history/:messageId', authenticationServer.ensureAuthenticated, function (req, res, next) {
        MessageChange.find({messageId: req.params.messageId}).exec(function (err, messageChanges) {
            if (err)
                res.status(404).end();
            else
                res.status(200).send(messageChanges);
            });
    });

0 个答案:

没有答案