类型错误:服务器渲染不是一个函数

时间:2017-01-18 08:45:14

标签: node.js reactjs

我在nodejs中运行服务器,但是当我尝试通过reactjs访问它时,我收到错误,因为TypeError:(0,_serverRender2.default)不是函数。我该怎么办?

import config from './config';
import apiRouter from './api';
import express from 'express';
import path from 'path';
import sassMiddleware from 'node-sass-middleware';
import serverRender from './serverRender';

const server=express();
server.set('view engine','ejs');

server.use(sassMiddleware({
  src:path.join(__dirname,'sass'),
  dest:path.join(__dirname,'public')
}));

server.get('/',(req,res)=> {
  serverRender()
  .then(content => {
    res.render('index', {
      content
    });
  })
  .catch(console.error);
});

server.use(express.static('public'));

server.use('/api', apiRouter);

server.listen(config.port,  () => {
  console.info('express listening on port ', config.port);
});

这是我的serverRender文件

import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './src/components/App';
import axios from 'axios';
//import config from './config';

const serverRender = () =>{

axios.get('http://localhost:8080/api/contests')
  .then(resp=>{
return ReactDOMServer.renderToString(<App initialContests = {resp.data.contests}/>);
   // console.log(resp.data);
  });  
}
export default serverRender;

2 个答案:

答案 0 :(得分:1)

serverRender()不会返回Promise。您可以尝试基于回调的方法。

const serverRender = (callback) =>{
   axios.get('http://localhost:8080/api/contests')
     .then(resp=>{
        callback(ReactDOMServer.renderToString(<App initialContests = {resp.data.contests}/>));
     });  
 }

<强> serverRender.js

server.get('/',(req,res)=> {
   serverRender(content => {
      res.render('index', {
        content
      });
   });
});

答案 1 :(得分:0)

您应该检查您在 serverRender.js

中编写的代码

您看到的错误告诉您,您默认

默认