У меня возникли проблемы с тем, чтобы мой текущий проект работал на данный момент ... Я знаю, что не следую некоторым из лучших практик, когда дело касается структуры, но это подразумевается исключительно как проверка функциональности, пока я не смогу заставить ее работать, а затем я ее правильно построю.Построение нескольких простых проектов тестовых проектов со средним стеком
Я работаю над созданием простого форума с советами, сообщениями, а затем комментариями. Я основываю это на этом руководстве thinkster.io, https://thinkster.io/mean-stack-tutorial#opening-rest-routes.
Платы и сообщения у меня есть, но добавление комментариев - это еще одна история. Я попытался добавить новую схему комментариев и определить некоторые маршруты на стороне сервера, чтобы я мог получать и публиковать комментарии, но это не сработало. Теперь моя стратегия состоит в том, чтобы просто поместить комментарии в мою mongoose postSchema, а затем скрыть их и форму комментариев или ввести html с угловым, когда пользователь нажимает кнопку просмотра комментариев. Это не работает, хотя, поскольку моя отправка не обновляет представление или базу данных. В настоящее время я работаю.
app.js
(function() {
angular.module('test', ['ui.router', 'ngMaterial'])
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', {
url: '/home',
templateUrl: '/views/home/home.html',
controller: 'MainController',
resolve: {
boardPromise: ['boards', function (boards) {
return boards.getAll();
}]
}
})
.state('boards', {
url: '/boards/{id}',
templateUrl: '/views/posts/posts.html',
controller: 'PostsController',
resolve: {
board: ['$stateParams', 'boards', function ($stateParams, boards) {
return boards.get($stateParams.id);
}]
}
});
$urlRouterProvider.otherwise('home');
}]);
}());
Тогда мои контроллеры являются следующие:
Главный контроллер
(function() {
angular.module('test')
.controller('MainController', ['$scope', 'boards', function($scope, boards) {
$scope.boards = boards.boards;
$scope.addBoard = function() {
if ($scope.title === '') {
return;
}
boards.create({
title: $scope.title,
description: $scope.description,
});
$scope.title = '';
$scope.description = '';
};
}]);
}());
сообщений Контроллер
(function() {
'use strict';
angular.module('test')
.controller('PostsController', ['$scope', 'boards', 'board', function ($scope, boards, board) {
$scope.board = board;
$scope.addPost = function() {
if ($scope.body === '') {
return;
}
boards.addPost(board._id, {
body: $scope.body,
author: 'user',
}).success(function (post) {
$scope.board.posts.push(post);
});
$scope.body = '';
};
$scope.addComment = function() {
if ($scope.commentts === '') {
return;
}
boards.addComment(board._id, {
comments: $scope.comments,
author: 'user',
}).success(function (comment) {
$scope.board.posts.comments.push(comment);
})
$scope.comments = ''
};
}]);
}());
служба обработки мой $ HTTP,
(function() {
'use strict';
angular.module('test')
.factory('boards', [ '$http', function($http) {
var o = {
boards: []
};
o.getAll = function() {
return $http.get('/boards').success(function (data) {
angular.copy(data, o.boards);
});
};
o.create = function(board) {
return $http.post('/boards', board).success(function (data) {
o.boards.push(data);
});
};
o.get = function(id) {
return $http.get('/boards/' + id).then(function (res) {
return res.data;
});
};
o.addPost = function (id, post) {
return $http.post('/boards/' + id + '/posts', post);
};
o.addComment = function (id, comment) {
return $http.post('/boards/' + id + '/posts', comment);
};
return o;
}]);
}());
Это соответствующая часть моего внутреннего интерфейса:
'use strict';
var mongoose = require('mongoose'),
Board = mongoose.model('Board'),
Post = mongoose.model('Post');
module.exports = function (app) {
app.get('/boards', function (req, res, next) {
Board.find(function (err, boards) {
if (err) {
return next(err);
}
res.json(boards);
});
});
app.post('/boards', function (req, res, next) {
var board = new Board(req.body);
board.save(function (err, board) {
if (err) {
return next(err);
}
res.json(board);
});
});
app.param('board', function (req, res, next, id) {
var query = Board.findById(id);
query.exec(function (err, board) {
if (err) {
return next(err);
}
if (!board) {
return next(new Error('can\'t find the boards'));
}
req.board = board;
return next();
});
});
app.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 the post'));
}
req.post = post;
return next();
};
});
app.param('comment', function (req, res, next, id) {
var query = Comment.findById(id);
query.exec = function (err, comment) {
if (err){
return next(err);
}
if (!comment) {
return next(new Error('can\'t find the comment'));
}
req.comment = comment;
return next();
};
});
app.get('/boards/:board', function (req, res, next) {
req.board.populate('posts', 'comments', function (err, board) {
if (err) {
return next(err);
}
res.json(board);
});
});
app.post('/boards/:board/posts', function (req, res, next) {
var post = new Post(req.body);
post.board = req.board;
post.save(function (err, post) {
if (err) {
return next(err);
}
req.board.posts.push(post);
req.board.save(function (err, board) {
if (err) {
return next(err);
}
res.json(post);
});
});
});
};
И соответствующие схемы:
Board
схема:
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var boardSchema = new Schema({
title: String,
description: String,
posts: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}]
});
mongoose.model('Board', boardSchema);
и Post
Схема:
'use strict';
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var postSchema = new Schema({
body: String,
author: String,
comments: {
type: String,
},
board: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Board'
},
});
mongoose.model('Post', postSchema);
Любая помощь приветствуется. Я довольно новичок в использовании углового и стека MEAN в целом, но я действительно стараюсь стать лучше. Любая информация, которую вы, ребята, можете мне дать, наверняка улучшит мое понимание. Спасибо огромное! :)