我正在学习如何在OpenShift上设置一个使用node,express,GraphQL和Postgres的服务器,我需要一些帮助 .
在尝试设置GraphQL Server时,我一直在关注它,它可以在我的本地机器上运行:
import Express from 'express';
import GraphQL from 'express-graphql';
import Schema from './db/GQLschema';
const app = Express();
app.use('/graphql', GraphQL({
schema: Schema,
pretty: true,
graphiql: true
}));
...
我正在使用OpenShift提供的server.js模板,所以上面改为:
...
self.app = express();
self.app.configure(function() {
self.app.use('/public', express.static(__dirname+'/public'));
self.app.use('/graphql', GraphQL({
schema: Schema,
pretty: true,
graphiql: true
}));
});
...
但是当推到OpenShift时这不起作用 . 我得到'内部服务器错误'而不是graphiql接口 .
我是新手,但这里有一些关于它可能与之有什么关系的猜测:
-
连接数据库
-
缺少依赖项
-
连接数据库:我有2个json配置文件 . 一个用于我的本地计算机,它使用端口转发SSH隧道连接到OpenShift . 这很好 . 另一个是 生产环境 . 在其中,我拥有OpenShift为我提供的数据库名称,用户,端口,主机和密码的所有字符串 . 我正在使用配置库,它查看NODE_ENV以决定使用哪个配置json文件 . 我将OpenShift上的NODE_ENV变量设置为 生产环境 . 当我查询它时,它显示所有正确的字符串 . 还有其他我需要设置的东西吗?
-
缺少依赖项:为了保持整洁,我将后端代码与前端代码分开 . 所以后端代码只安装了express,graphql,sequelize,config和pg . 我需要其他东西来使graphiql页面工作吗?另外,我将所有/ node_modules /放在.gitignore文件中 - 我假设OpenShift在推送后安装它们 . 这是正确的做法吗?
非常感谢任何帮助!
1 回答
好的 - 我通过执行以下操作解决了这个问题:
在openshift cli工具中打开错误日志
这会给你一些线索 . 在我的例子中,这是来自express-graphql“未解决的承诺”的消息 . 经过研究,我发现如果您安装并保存es-promise并将此行添加到server.js文件的顶部:
希望能帮助别人!