2017-03-01 125 views
0

我创建了一个简单的反应程序使用this车间混帐与我小的变化基本呈现服务器端的区别。 所以当我在本地运行NODE_ENV=server node server.js它工作正常。但是我试图在Bluemix Nodejs服务器上尝试部署此应用程序失败。这里有一个日志: enter image description here 这里是我的server.js代码:是什么运行服务器端做出反应本地渲染和真实服务器的NodeJS上(IBM Bluemix)

require('babel-register') 

const express = require('express') 
const React = require('react') 
const ReactDOMServer = require('react-dom/server') 
const ReactRouter = require('react-router') 
const StaticRouter = ReactRouter.StaticRouter 
const _ = require('lodash') 
const fs = require('fs') 
const PORT = 5050 
const baseTemplate = fs.readFileSync('./index.html') 
const template = _.template(baseTemplate) 
const App = require('./js/App').default 

const server = express() 

server.use('/_public', express.static('./_public')) 

server.use((req, res) => { 
    const context = {} 
    const body = ReactDOMServer.renderToString(
    React.createElement(StaticRouter, {location: req.url, 
     context: context}, 
    React.createElement(App)) 
) 

    res.write(template({body: body})) 
    res.end() 
}) 

console.log('listening on port', PORT) 
server.listen(PORT) 

附:很明显,它不了解js/App.js中的ES6语法,但在我的本地服务器上它工作。 默认情况下NODE_ENV=production但根据Bluemix docs我创建了.profile.d目录 node_env.sh代码的文件:

export NODE_ENV=server; 

但我不知道这是否文件更改node_env。

+0

你能检查你的完整源代码到github仓库吗? –

+0

@RamVennam我的代码在本地机器上运行良好,是的它也位于[Gitlab](https://gitlab.com/ytaras/pinobeton2/tree/ServerSR) –

回答

0

我希望有人比我更有知识可以提供更好的解决方案,但这是我做了什么使您的应用程序工作。可能有更好的答案。

假设你不想在生产模式下运行...

1)server.js:如在港口的环境变量设置监听的端口。
server.listen(process.env.PORT || PORT)

2)的package.json:在scripts

"start": "babel-node server.js --presets es2015,stage-2"

3)添加start命令获取巴贝尔-CLI

npm install --save-dev babel-cli

npm install --save-dev babel-preset-es2015 babel-preset-stage-2

4)创建一个manifest.yml设置CF性能

applications: 
- name: rvennam-node-react 
    memory: 1G 
    disk_quota: 2G 
    env: 
    NPM_CONFIG_PRODUCTION: false 
    NODE_ENV: dev 

5)中的package.json devDependencies删除eslint依赖(有一个错配)

再次,这是假设你想要运行Bluemix在开发模式下。如果您想要在Bluemix上制作,我会认为您会想要使用webpack在本地构建,然后推送并提供您的dist目录。

相关问题