Динамический c атрибут модели с SAILSJS - PullRequest
1 голос
/ 18 января 2020

Мой вариант использования требует, чтобы я использовал Dynami c Атрибуты модели с моим проектом Sails. Js, и все мои методы потерпели неудачу. Сначала я попытался вызвать метод model1 из model2, но он не работает. Я также пытался использовать глобальные переменные, но это тоже не помогло, потому что глобальный устанавливается после загрузки приложения, и, наконец, я вызвал model1Controller из model2, но он все еще не работает. Это метод в моем model2Controller

 getbyTable:function(req,res){
        let field = Field.find({fTable:req.param('tableName')});
        field.exec(function(err, response) {
        if(err) {
            res.status(500);
            return res.view('500', {data: err});
        }
        //res.json(response);
        return response;
        });
    },

И это моя модель2

'use strict';
const fieldController = require('../controllers/Model1Controller');

const donnees = fieldController.getbyTable('person');

module.exports={

}

При запуске он срабатывает как ошибка, что req.param не является функцией. Нужна помощь!!! Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2020

Это выглядит как интересный способ организации - мне было бы любопытно увидеть, насколько успешным может быть проект без установленных в камне атрибутов модели.

Я вижу несколько конкретных c ошибок в вашем код, возможно, их просмотр поможет вам двигаться вперед.

  1. Из вашей модели2 вы вызываете getbyTable('person') со строковым аргументом - но все методы контроллера действительно должны иметь аргументы запроса / ответа (как в определение getbyTable(req, res). Непосредственный вызов метода контроллера немного необычен - если бы вы когда-либо делали это, я бы ожидал передать запрос и ответ от какого-либо другого метода контроллера.
  2. Внутри getbyTable вы попытайтесь вернуть ответ, но ответ определен только внутри обратного вызова * 1011. * Ответом будет массив объектов, выбранных из вашей базы данных - если это то, что вам нужно, вы не можете вернуть их напрямую, поскольку вызовы базы данных асинхронны c.
  3. Ваш контроллер, вероятно, должен что-то делать с res во всех логических ветвях, таких как res.json, res.send, et c.

Немного трудно понять, чего именно вы пытаетесь достичь, поэтому, возможно, если бы вы могли объяснить цель, у меня мог бы быть более полезный совет , Сейчас я могу сказать, что вы можете рассмотреть возможность размещения некоторого кода внутри службы, а не в контроллере. Создайте файл /api/services/MyService.js и используйте его для экспорта метода, который можно вызывать из вашей модели2 (вам может потребоваться услуга, как и в контроллере). Строго придерживайтесь методов контроллера для обработки запросов.

Удачи.

...