我在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);
});
});