Стек Mean.js - экспорт.читайте с помощью функций findOne и find, вызывайте в Angularjs

0

Я новичок в 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, поэтому я могу просто использовать контроллер клиентских пользователей, чтобы это произошло? Потому что я тоже пытался сделать это и провалился. Я, вероятно, просто не хватает здесь логики. Заранее благодарю за любую помощь.

Теги:
jsonp
meanjs

1 ответ

0

Есть ли код, который вызывает сервер (node.js/customers.server.controller.js) с клиента?

Поскольку этот вызов будет асинхронным, функции Customers.get() и Customers.query() должны возвращать обещания. Угловой не разворачивает их автоматически.

Что-то вроде этого должно работать:

Customers
    .get({
        customerId: $stateParams.customerId
    })
    .then(function(customer){
        $scope.customer = customer;
    });
  • 0
    Я не уверен, что вы подразумеваете под своим вопросом. Да, они возвращают обещания. Однако код, который вы разместили, не работал. В нем говорится, что Customers.get(...).then is not a function я добавил $promise перед функцией .then, но не говорит, что $ scope.customer не определен.
  • 0
    Если они возвращают обещания, функция .then () будет функцией (согласно спецификации обещания). Что касается первого вопроса ... в коде, который вы разместили, есть пробел. Ваш первый блок кода выполняется в файле node.js, который является сервером . Ваш второй код - angular.js, который запускается на клиенте. Чтобы клиент мог вызвать сервер, я ожидал увидеть некоторые вызовы ajax. Где этот код? Код, содержащий вызовы ajax? Есть угловой сервис, который выполняет это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню