2017-08-16 1 views
0

J'essaie de configurer la connexion postgresql avec sails.js. Voici ma config:sails-postgresql "ReferenceError: l'utilisateur n'est pas défini"

api/modèles/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, 
    } 
} 

config/models.js

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

api /controllers/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); 
    }) 
    } 
    } 
}; 

Quand je lève mon application et j'envoie la demande suivante (qui envoient argument passé après que params pour l'action « créer » de UserController):

http://127.0.0.1:1337/User/Subscribe?username=pierre&password=pass&[email protected]

Je l'erreur:

error: Sending 500 ("Server Error") response: ReferenceError: User is not defined at Object.create (C:\Users\Pierre\Documents\Geek\SAILS\hikout\api\controllers\UserController.js:10:3) at wrapper (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\lodash\lib\index.js:3250:19) at routeTargetFnWrapper (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:181:5) at callbacks (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:164:37) at param (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:138:11) at pass (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:145:5) at nextRoute (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:100:7) at callbacks (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:167:11) at alwaysAllow (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\hooks\policies\index.js:224:11) at routeTargetFnWrapper (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:181:5) at callbacks (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:164:37) at param (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:138:11) at pass (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:145:5) at nextRoute (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:100:7) at callbacks (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:167:11) at module.exports (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\hooks\cors\clear-headers.js:14:3) at routeTargetFnWrapper (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:181:5) at callbacks (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:164:37) at param (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:138:11) at pass (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:145:5) at nextRoute (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:100:7) at callbacks (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\node_modules\@sailshq\express\lib\router\index.js:167:11)

Cependant tout fonctionne parfaitement sans connexion postgresSQL ... Est-ce que quelqu'un sait comment résoudre ce problème?

Merci d'avance pour votre aide.

EDIT: J'ai changé le chemin des fichiers pour obtenir les bons

Répondre

0

En fait, les chemins de fichier étaient erronés dans mon premier message. J'avais mis les bons dans mon application.

Le problème était dans le fichier config/models.js J'essayais de lancer mon application avec le mode 'safe' pour ma connexion. Cependant, cela ne fonctionne pas lors de la première manche. Le bon moyen est d'utiliser le mode «drop» ou «drop» pour votre connexion afin de créer des tables correspondant à vos modèles lors de la première exécution.

La bonne config/fichier models.js est:

module.exports.models = { 

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

}; 

Je devais aussi changer simplement mon modèle comme celui-ci:

module.exports = { 

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

Il semble que vous manquez le fichier de modèle pour votre table utilisateur.

Il devrait être dans api/models/User.js

Je pense que vous avez juste besoin de déplacer le fichier api/controllers/User.js pour le faire fonctionner.

également renommé votre dossier api/controller être api/controllers

Voiles est fondée sur les conventions, si vous mettez les choses au bon endroit, il fonctionnera sans chichi. Ainsi, vos fichiers de modèle doivent aller dans

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

Si ces deux fichiers sont présents, il crée la table et déclarer TABLENAME variable globale pour vous.