2017-03-01 37 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目錄。

相關問題