sails-postgresql "ReferenceError: пользователь не определен"

Я пытаюсь установить соединение postgresql с sails.js . Вот мой конфиг:

API / модель / user.js:

module.exports = {

tableName: 'user',
meta: {
    schemaName: 'public'
},
identity:'sails',
connection: 'postgreSQL',

attributes: {
username:{
    type:'string',
    required:true,
},
password:{
    type:'string',
    required:true,
},
email:{
    type:'email',
    required:true,
},
}};

Config / connections.js:

module.exports.connections = {
postgreSQL: {
      adapter: 'sails-postgresql',
      host: '127.0.0.1',
      user: 'sails', // optional
      password: 'pass', // optional
      database: 'sails', //optional
      port:5433,
    }
}

конфиг / models.js

module.exports.models = {
  connection: 'postgreSQL',
  migrate: 'safe',    
};

API / контроллеры /UserController.js

module.exports = {
    create: function(req,res){
        User.create(req.allParams()).exec(function createdUser(err, created){
            if(created != undefined){
                sails.log('Utilisateur créé')
                res.view('User/user_created');
                sails.log(req.allParams())
            }
            else
            {
                sails.log('Pas d\'utilisateur créé')
                sails.log(req.allParams())
            }

        });
    },

    search: function(req,res){
    sails.log("Recherche saisie:")
    sails.log(req.allParams())
    if(req.allParams() == undefined){
        sails.log("Pas d'utilisateur recherché");
    }
    else {
        User.find({username : {contains: req.allParams().username}}).exec(function (err, userFound){
        sails.log('utilisateur trouvé');
        sails.log(userFound);
        return res.json(userFound);
    })
    }
    }
};

Когда я поднимаю свое приложение и отправляю следующий запрос (который отправляет постагмент в качестве параметров для действия "создать" из UserController):

http://127.0.0.1:1337/User/Subscribe?username=pierre&password=pass&email=test@test.fr

У меня ошибка:

ошибка: отправка ответа 500 ("Ошибка сервера"): ReferenceError: пользователь не определен в Object.create (C:\Users\Pierre\Documents\Geek\SAILS\hikout\api\controllers\UserController.js:10:3) в оболочке (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\lodash\lib\index.js:3250:19) в routeTargetFnWrapper (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:181:5) при обратных вызовах (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:164:37) в параметре (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:138:11) на проходе (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:145:5) в nextRoute (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:100:7) при обратных вызовах (C: \ Users \ Pierre \ AppData \ Roaming \ npm \ node_modules \ sails \ node_modules \ @sailshq \ выраж ess\lib\router\index.js:167:11) at alwaysAllow (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\hooks\icies\index.js:224:11) в routeTargetFnWrapper (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:181:5) при обратных вызовах (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:164:37) в параметре (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:138:11) на проходе (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:145:5) на nextRoute (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:100:7) при обратных вызовах (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:167:11) в module.exports (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\hooks\cors\clear-headers.js:14:3) на routeTargetFnWra pper (C: \ Users \ Pierre \ AppData \ Roaming \ npm \ node_modules \ sails \ lib \ router \ bind.js: 181: 5) при обратных вызовах (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:164:37) в параметре (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:138:11) на проходе (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:145:5) на nextRoute (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:100:7) при обратных вызовах (C: \ Users \ Pierre \ AppData \ Roaming \ НПМ \ node_modules \ парусов \ node_modules \ @sailshq \ экспресс \ Lib \ маршрутизатор \ index.js: 167: 11)

Однако все прекрасно работает без подключения PostgresSQL... Кто-нибудь знает, как решить эту проблему?

Заранее благодарю за помощь.

РЕДАКТИРОВАТЬ: я изменил путь к файлам, чтобы получить хорошие

2 ответа

Решение

На самом деле, пути к файлам были неправильными в моем первом посте. Я настроил правильные в моем приложении.

Проблема была в файле config/models.js. Я пытался запустить свое приложение в "безопасном" режиме для моего соединения. Однако это не работает во время первого запуска. Хороший способ - использовать режим "drop" или "drop" для вашего соединения, чтобы создавать таблицы, соответствующие вашим моделям во время первого запуска.

Хороший файл config/models.js:

module.exports.models = {

  connection: 'postgreSQL',
  migrate: 'alter', // you can also use 'drop' 

};

Я должен был также изменить свою модель просто так:

module.exports = {

    attributes: {
        username:{
            type:'string',
            required:true,
        },
        email:{
            type:'string',
            required:true,
        },
        password:{
            type:'string',
            required:true,
        },
    }
};

Похоже, вам не хватает файла модели для вашей таблицы пользователей.

Должно быть в api/models/User.js

Я думаю, вам просто нужно переместить файл api/controllers/User.js чтобы это работало.

Также переименовал ваш api/controller папка, которая будет api/controllers

Паруса основаны на соглашениях, если вы поставите вещи в нужное место, они будут работать без суеты. Таким образом, ваши файлы модели должны войти в

api/models/TABLENAME.js api/controllers/TABLENAMEController.js

Если оба этих файла присутствуют, он создаст таблицу и объявит для вас глобальную переменную TABLENAME.

Другие вопросы по тегам