Я новичок в MEAN.js, и я немного запутался в том, как использовать export.read и вызвать функцию findOne с добавлением функции find. У меня есть модуль customers
модуль customer-users
в моем приложении. У меня есть client.server.controller, customer-users.server.controller и клиентские контроллеры. Клиент похож на организацию. И тогда есть пользователи, которые попадают под клиента. Я могу отображать список пользователей-клиентов самостоятельно с помощью export.list в модуле customer-users
. Я могу отображать список клиентов в модуле customers
, а затем, конечно, у меня есть вид клиента, когда вы выбираете клиента. То, что я хочу сделать, - это когда вы выбираете клиента, список пользователей-клиентов будет отображаться под именем клиента в представлении клиента. Я попытался отредактировать контроллеры customers.server и customers.client, чтобы это сделать, но я не уверен, как правильно это сделать.
Вот мои customers.server.controller.js
:
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
errorHandler = require('./errors.server.controller'),
Customer = mongoose.model('Customer'),
passport = require('passport'),
User = mongoose.model('User'),
CustomerUser = mongoose.model('CustomerUser'),
_ = require('lodash');
/**
* Show the current Customer
*/
exports.read = function(req, res) {
Customer.findOne({ _id: req.params.customerId }).exec(function(err, customer) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
CustomerUser.find({ customer: req.customer }).sort('-created').exec(function(err, customerUsers) {
if (err) {
console.log('error');
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
var customerUsersList = customerUsers;
var selectedCustomer = customer;
var customerWithUsers = {
customer: selectedCustomer,
customerUsers: customerUsersList
};
console.log('1 : ' + customerUsersList);
console.log('2 : ' + selectedCustomer);
console.log('3 : ' + customerWithUsers);
res.jsonp(customerWithUsers);
}
});
}
});
};
Я пытаюсь отладить весь код со всеми вызовами console.log, и все, кажется, дает мне нужные массивы, которые я ищу. Поэтому я чувствую, что это должно работать на стороне сервера.
Мои customers.client.controller.js
(пока я не смущен, как правильно это сделать):
use strict';
// Customers controller
angular.module('customers').controller('CustomersController', ['$scope', '$stateParams', '$location', 'Authentication', 'Customers', 'AdminCustomerUsers', 'CustomerUsers',
function($scope, $stateParams, $location, Authentication, Customers, AdminCustomerUsers, CustomerUsers) {
$scope.authentication = Authentication;
$scope.customerId = $stateParams.customerId;
$scope.findOne = function() {
$scope.customer = Customers.get({
customerId: $stateParams.customerId
});
$scope.customerUsers = Customers.query({
customer: $scope.customer
});
console.log($scope.customer);
console.log($scope.customer.customerUsers);
console.log($scope.customerUsers);
};
Я пробовал много разных вещей, поэтому это не та степень, что у меня была, но это база для моего вызова findOne для отдельного клиента.
Мой view-customers.client.view.html
(который, конечно же, должен быть пересмотрен с помощью рабочего решения):
<section data-ng-controller="CustomersController" data-ng-init="findOne()">
<div class="page-header">
<h1 data-ng-bind="customer.name"></h1>
</div>
<div class="pull-right" data-ng-show="((authentication.user) && (authentication.user._id == customer.user._id))">
<a class="btn btn-primary" href="/#!/customers/{{customer._id}}/edit">
<i class="glyphicon glyphicon-edit"></i>
</a>
<a class="btn btn-primary" href="/#!/customer-users/{{customer._id}}/create">
<i class="glyphicon glyphicon-user"></i>
<i class="glyphicon glyphicon-plus"></i>
</a>
<!-- <a class="btn btn-default btn-danger" data-ng-click="remove();">
<i class="glyphicon glyphicon-trash"></i>
</a> -->
</div>
<small>
<em class="text-muted">
Added on
<span data-ng-bind="customer.created | date:'mediumDate'"></span>
by
<span data-ng-bind="customer.user.displayName"></span>
</em>
</small>
<br /><br /><br />
<div class="list-group">
<div data-ng-repeat="customerUser in customerUsers" class="list-group-item">
<h4 class="list-group-item-heading">
{{customerUser.user.displayName}}
hello
<small class="label label-default" ng-show="customerUser.admin">admin</small>
</h4>
</div>
</div>
</section>
Итак, мой вопрос: как получить список пользователей-клиентов под видом клиента? Неужели я все это делаю неправильно? Есть ли способ лучше? Как я уже сказал, все работает на стороне сервера, но я не могу назвать массив customerUsers, заполненный правильным объектом на стороне клиента. Есть ли способ использовать CustomerUsersController в представлении вместе с CustomerController, поэтому я могу просто использовать контроллер клиентских пользователей, чтобы это произошло? Потому что я тоже пытался сделать это и провалился. Я, вероятно, просто не хватает здесь логики. Заранее благодарю за любую помощь.
Есть ли код, который вызывает сервер (node.js/customers.server.controller.js) с клиента?
Поскольку этот вызов будет асинхронным, функции Customers.get() и Customers.query() должны возвращать обещания. Угловой не разворачивает их автоматически.
Что-то вроде этого должно работать:
Customers
.get({
customerId: $stateParams.customerId
})
.then(function(customer){
$scope.customer = customer;
});
Customers.get(...).then is not a function
я добавил$promise
перед функцией .then, но не говорит, что $ scope.customer не определен.