My studentApi.js выглядит следующим образом. Router.param() используется для сохранения кода для повторения снова и снова.Как вызвать node.js api из углового?
router.param('post', function (req, res, next, id) {
var query = Post.findById(id);
query.exec(function (err, post) {
if (err) { return next(err); }
if (!post) { return next(new Error('Can\'t find post')); }
req.post = post;
return next();
})
});
router.put('/posts/:post/upvote', function (req, res, next) {
res.post.upvote(function (err, post) {
if (err) { return next(err);}
});
});
В угловой Я звоню как
o.upvote = function (post) {
return $http.put('/studentapi/posts/' + post._id + '/upvote')
.success(function (data) {
alert("post voted");
post.upvotes += 1;
});
};
Моя модель выглядит следующим образом, вызывая upvote метод внутренне от модели.
var mongoose = require('mongoose');
var PostSchema = new mongoose.Schema({
title: String,
link: String,
upvotes: { type: Number, default: 0 },
downvotes: { type: Number, default: 0 },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
mongoose.model('Post', PostSchema);
PostSchema.methods.upvote = function (cb) {
this.upvotes += 1;
this.save(cb);
}
является вашим api и работает? И в вашем studentApi.js есть только «post /: post», где код, инициализирующий его «/ studentapi»? Возможно, вам не хватает инициализации. Попробуйте PUT на "/ posts /" без "studentapi". Или у вас есть «/ studentApi», а не «studentapi» –
Yup, api работает, уже работая с простым запросом на получение. Я получаю запись из db и успешно свяжусь. В этом случае я обновляю запись, я передаю параметр, как указано выше, но 404. –
studentApi.js, похоже, выполняется на стороне сервера с узлом, поэтому alert() не должен существовать, кроме случаев, когда вы импортируете функцию с тем же именем. Тогда, что такое res.post, это модель, связанная с mongodb? И, наконец, что у вас на консоли узла? – KyleK