我正在研究一个平均堆栈应用程序,并且无法向Express/Node服务器发送请求以删除Mongo中的一个数组元素。这里是我的模式..Mean Stack。解释客户端控制器如何通过路由与服务器控制器进行通信以及如何调用服务器方法
var DeckSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Deck name',
trim: true
},
card: [{
name: {
type: String, default: '',
trim: true,
required: 'Please fill Card name'
},...
这里是我创造
.state('decks.card', {
url: '/:deckId/card/:cardId',
templateUrl: 'modules/decks/client/views/view-card.client.view.html',
controller: 'DecksController',
controllerAs: 'vm',
resolve: {
deckResolve: getDeck,
cardResolve: getCard
},...
function getDeck($stateParams, DecksService) {
return DecksService.get({
deckId: $stateParams.deckId
}).$promise;
}
function getCard($stateParams, RemoveCardService) {
return RemoveCardService.get({
deckId: $stateParams.deckId,
cardId: $stateParams.cardId
}).$promise;
这里,我的客户端路线再在服务器端路线
app.route('/api/decks/:deckId/card/:cardId').all()
.get(decks.read)
.put(decks.update)
.delete(decks.deleteCard);
// Finish by binding the Deck middleware
app.param('deckId', decks.deckByID);
//app.param('cardId', decks.cardByID); This causes errors
服务器端控制器
exports.deleteCard = function(req, res) {
res.send('In deleteCard');
Deck.update(
{'_id': req.body.deck_.id},
{ $pull: { "card" : { id: req.body.deck.card._id } } },
false,
true
);
//decks.update({id: req.params.deckId}, { $pullAll: {id: [req.params.cardId] } })
};
和中间件...
exports.cardByID = function(req, res, next, id){
if (!mongoose.Types.ObjectId.isValid(id)) {
return res.status(400).send({
message: 'Card is invalid'
});
}
Deck.findById(id).populate('card','user', 'displayName').exec(function (err, deck) {
if (err) {
return next(err);
} else if (!deck) {
return res.status(404).send({
message: 'No Card with that identifier has been found'
});
}
req.deck.card = deck.card;
next();
});
};
如何调用客户端控制器deleteCard方法?我的控制台不打印“在DeleteCard”消息,我不知道什么是错的(从我的理解,客户端控制器使用路由来确定哪些方法调用服务器端调用API后,如果我有没有得到足够的信息,请让我知道。在此先感谢!
'res.send'不是'console.log',res.send只会发送一些东西给客户端。我不remoder,但我不知道你的函数的其余部分是执行(我的意思是res.send后) –