首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Node服务器将显示错误消息

运行Node服务器将显示错误消息
EN

Stack Overflow用户
提问于 2016-11-03 19:46:11
回答 2查看 226关注 0票数 1

webpack刚开始尝试运行我自己的服务器(node server.js),但我得到了这样的消息:

代码语言:javascript
复制
$ node server.js
/path/to/server.js:3
import path from 'path'
^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:513:28)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)
    at startup (bootstrap_node.js:144:9)
    at bootstrap_node.js:467:3

My server.js:

代码语言:javascript
复制
require("babel-register");

import path from 'path'
import Express from 'express'
import React from 'react'
import { createStore } from 'redux'
import { Provider } from 'react-redux'

import counterApp from './reducers'
import App from './containers/App'

import { renderToString } from 'react-dom/server'

const app = Express()
const port = 3000

// This is fired every time a request is made
app.use(handleRender)


function handleRender(req, res) {
   // Create a new Redux store instance
   const store = createStore(counterApp) // this is taken from './reducers'

   // Render the component to a string
   const html = renderToString(
      <Provider store={store}> // Needs an import?
         <App /> // this is defined in './containers/...'
      </Provider>
   )

   // Grab the initial state from our Redux store
   const preloadedState = store.getState()

   // Send the rendered page back to the client
   res.send(renderFullPage(html, preloadedState))
}

// Yet to be defined...
function renderFullPage(html, preloadedState) {
   return
      <!doctype html>
      <html>
         <head>
            <title>Paulos3000 Redux Universal Example</title>
         </head>
         <body>
            <div id='root'>${html}</div>
            <script>
               window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState)}
            </script>
            <script src='/static/bundle.js'></script>
         </body>
      </html>
}

app.listen(port)

有人能看出我的代码有问题吗?如果您需要我提供更多的信息,请告诉我(因为我不知道问题的来源,所以不确定应该包括什么)。

更新:

代码语言:javascript
复制
SyntaxError: /path/to/server.js: Unexpected token (25:6)
  23 |   
  24 |    const html = renderToString(
> 25 |       <Provider>
     |       ^
  26 |          <App />
  27 |       </Provider>
  28 |    )
EN

回答 2

Stack Overflow用户

发布于 2016-11-03 19:48:40

根据Node版本的不同,它不支持import语法。

尝试使用通过require()导入的方法:

代码语言:javascript
复制
const path = require('path').default
票数 2
EN

Stack Overflow用户

发布于 2016-11-03 19:52:37

babel-register不适用于您使用它的文件,只适用于您随后使用的文件( require() )。

例如:

代码语言:javascript
复制
// bootstrap.js
require("babel-register");
require("./server");

// server.js
import path from 'path'
import Express from 'express'
import React from 'react'
...

并以以下方式启动服务器:

代码语言:javascript
复制
$ node bootstrap.js

这确实假设您已经有了一个有效的Babel设置。如果没有,请在与.babelrc相同的目录中创建一个名为server.js的文件,其中包含以下内容:

代码语言:javascript
复制
{
  "presets": ["es2015", "react"]
}

并安装预置模块:

代码语言:javascript
复制
$ npm i babel-preset-es2015 babel-preset-react
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40409999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档