trudesk票务系统突然停止工作

时间:2018-11-23 11:05:30

标签: node.js pm2

11/23 07:18:15 [3112] - �[32minfo�[39m: trudesk v1.0.2 Copyright (C) 2014-2018 Chris Brame
11/23 07:18:15 [3112] - �[32minfo�[39m:
11/23 07:18:15 [3112] - �[32minfo�[39m: Running in: development
11/23 07:18:15 [3112] - �[32minfo�[39m: Server Time: Fri Nov 23 2018 07:18:15 GMT+0000 (Coordinated Universal Time)
11/23 07:18:16 [3112] - �[32minfo�[39m: Connected to MongoDB
11/23 07:18:19 [3112] - �[32minfo�[39m: TruDesk is now listening on port: 8118
11/23 07:18:19 [3112] - �[32minfo�[39m: SocketServer Running
11/23 07:18:20 [3112] - �[34mdebug�[39m: Checking Default Settings...
11/23 07:18:20 [3112] - �[34mdebug�[39m: Timezone set to America/New_York
TypeError: Cannot read property '_id' of undefined
at C:\Program Files\iCuboid\trudesk-master\src\settings\defaults.js:109:33
at C:\Program Files\iCuboid\trudesk-master\node_modules\mongoose\lib\model.js:4451:16
at model.Query.(anonymous function).call (C:\Program Files\iCuboid\trudesk-master\node_modules\mongoose\lib\query.js:3606:7)
at C:\Program Files\iCuboid\trudesk-master\node_modules\kareem\index.js:315:21
at C:\Program Files\iCuboid\trudesk-master\node_modules\kareem\index.js:135:16
at args.(anonymous function) (C:\USERS\ICUBOID\APPDATA\ROAMING\NPM\node_modules\pm2\node_modules\event-loop-inspector\index.js:138:29)
at process._tickCallback (internal/process/next_tick.js:112:11)`

我正在使用trudesk node js Web应用程序。 它使用mongo db作为database.i安装在我的本地计算机上,但是在运行该应用程序的服务器上却出现此错误

2 个答案:

答案 0 :(得分:0)

前一段时间,当我搞乱数据库时遇到了这个问题。我通过验证第109行的src \ settings \ defaults.js中引用的对象来解决该问题(根据上面的错误和the github repo at this time)。

您可以在引用type._id的代码中看到该问题。您需要确认类型是对象,_id是字符串。从第107行开始:

            var defaultTicketType = new SettingsSchema({
                name: 'ticket:type:default',
                value: type._id
            });

进行更改,以便在引用对象的键之前对对象进行验证:

            if (typeof type !== 'object' ||  typeof type._id !== 'string' ) return;
            var defaultTicketType = new SettingsSchema({
                name: 'ticket:type:default',
                value: type._id
            });

答案 1 :(得分:0)

if (typeof type !== 'object' ||  typeof type._id !== 'string' ) return;

尽管这是一个有效的检查,但是返回没有调用callback,因此阻止了默认脚本正确完成退出。另外,_id可能并不总是读作字符串,并且value属于混合类型。

if (!_.isObject(type) || _.isUndefined(type._id)) return callback('Invalid Type. Skipping.')

我已将以上检查添加到代码库中。如果检测到默认票证类型设置不存在,则会调用参考函数。除非手动从MongoDB中删除/更新文档,否则这仅在第一次启动时发生。