首页 文章

在OpenShift上设置graphQL

提问于
浏览
1

我正在学习如何在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 回答

  • 1

    好的 - 我通过执行以下操作解决了这个问题:

    在openshift cli工具中打开错误日志

    rhc tail -a <yourappname>
    

    这会给你一些线索 . 在我的例子中,这是来自express-graphql“未解决的承诺”的消息 . 经过研究,我发现如果您安装并保存es-promise并将此行添加到server.js文件的顶部:

    require ('es6-promise').polyfill();
    

    希望能帮助别人!

相关问题