我的快递服务器无法识别中间件功能

我的快递服务器无法识别中间件功能

问题描述:

我正在处理服务器端渲染问题,我用express写了简单的服务器。不幸的是,我不断收到“TypeError('app.use()需要中间件函数')”错误。这里是我的app.js的样子:我的快递服务器无法识别中间件功能

var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var httpProxy = require('http-proxy'); 
var requestHandler = require('./public/requestHandler.bundle.js'); 
var app = express(); 

const apiProxy = httpProxy.createProxyServer({ 
    target:'http://localhost:3001' 
}); 

app.use('/api', function(req,res){ 
    apiProxy.web(req,res); 
}) 

app.use(logger('dev')); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.set('view engine', 'ejs'); 
app.use(requestHandler); //<------------------ 


app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 


app.use(function(err, req, res, next) { 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

这里是我的requestHandler:

import React from 'react'; 
import {renderToString} from 'react-dom/server'; 
import {StaticRouter} from 'react-router-dom'; 
import {Provider} from 'react-redux'; 
import {createStore, applyMiddleware} from 'redux'; 
import thunkMiddleware from 'redux-thunk'; 
import reducers from '../client/reducers'; 
import routes from '../client/components/routes'; 
import axios from 'axios'; 

function requestHandler(req, res, next) { 
    axios.get('http://localhost:3001/books').then(function(response) { 
    const createStoreWithMiddleware = applyMiddleware(thunkMiddleware)(createStore); 
    const store = createStoreWithMiddleware(reducers, { 
     "books": { 
     "books": response.data 
     } 
    }) 
    const initialState = JSON.stringify(store.getState()).replace(/<\/script/g, '<\\/script').replace(/<!--/g, '<\\\!--'); 
    const context = {}; 

    const reactComponent = renderToString(
     <Provider store={store}> 
     <StaticRouter location={req.url} context={context}> 
      {routes} 
     </StaticRouter> 
     </Provider> 
    ); 

    if (context.url) { 
     redirect(context.status, context.url) 
    } else { 
     res.status(200).render('index', {reactComponent, initialState}) 
    } 

    }) 
    .catch(function(err){ 
     console.log('#Initial Server-side rendering error', err); 
     }) 
}; 

export default requestHandler; 

我然后编译它使用的WebPack和通天ES5。为什么我的应用程序不把这个功能当作中间件?

我尝试使用CommonJS的出口它 - 没有影响

你的包是出口的ES6模块,但与CommonJS的导入它。尝试:

app.use(requestHandler.default); 
+0

不幸的是同样的错误 – Kreha6