Sails-postgresql“参考错误:未定义用户”

Posted

技术标签:

【中文标题】Sails-postgresql“参考错误:未定义用户”【英文标题】:sails-postgresql "ReferenceError: User is not defined" 【发布时间】:2018-01-25 01:25:58 【问题描述】:

我尝试使用sails.js 建立postgresql 连接。这是我的配置:

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

当我提起我的应用程序时,我发送了以下请求(它将 post agument 作为来自 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\express\lib\router\index.js:167:11) 在 alwaysAllow (C:\Users\Pierre\AppData\Roaming\npm\node_modules\sails\lib\hooks\policies\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) 在 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)

但是,如果没有 postgresSQL 连接,一切都可以完美运行...有人知道如何解决这个问题吗?

提前感谢您的帮助。

编辑:我更改了文件路径以获得好的文件

【问题讨论】:

【参考方案1】:

您似乎缺少 User 表的模型文件。

应该在api/models/User.js

我认为您只需移动文件api/controllers/User.js 即可使其工作。

还将您的 api/controller 文件夹重命名为 api/controllers

Sails 是基于约定的,如果你把东西放在正确的地方,它会毫不费力地工作。所以你的模型文件需要进去

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

如果这两个文件都存在,它将为您创建表并声明全局变量 TABLENAME。

【讨论】:

【参考方案2】:

实际上,我的第一篇文章中的文件路径是错误的。我在我的应用中设置了正确的。

问题出在文件config/models.js 中。我试图以safe 模式运行我的应用程序以进行连接。但是,这在第一次运行期间不起作用。最好的方法是使用alterdrop 模式进行连接,以便在第一次运行时创建与您的模型对应的表。

好的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,
        ,
    
;

【讨论】:

以上是关于Sails-postgresql“参考错误:未定义用户”的主要内容,如果未能解决你的问题,请参考以下文章

连接到在 Docker 容器中运行的数据库时,sails-postgresql“poolSize”太高错误

main.js:2未捕获的参考错误:未定义firebase [重复]

剑道网格:未捕获的参考错误:未定义单位

获取“未捕获的参考错误:$ 未定义” - 脚本以正确的顺序加载 - 并且可以从控制台工作 [重复]

ArangoDB Foxx 服务参考错误:未定义 URL

Angular Accept.js打破单元测试'参考错误:未定义接受'