Call to Node module failed with error: If you use aspnet-prerendering >= 2.0.0, you must update your server-side boot module to call createServerRenderer. Either update your boot module code, or revert to aspnet-prerendering version 1.x #1070

Closed
opened 2025-08-09 17:18:45 +00:00 by fergalmoran · 0 comments
Owner

Originally created by @YuriiNskyi on 1/31/2017

The title of issue is self-descriptive.

My webpack.config:

var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var merge = require('extendify')({ isDeep: true, arrays: 'concat' });
var devConfig = require('./webpack.config.dev');
var prodConfig = require('./webpack.config.prod');
var isDevelopment = process.env.ASPNETCORE_ENVIRONMENT === 'Development';
var extractCSS = new ExtractTextPlugin('site.css');

module.exports = merge({
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders: [
            { test: /\.css/, loader: extractCSS.extract(['css']) },
            {
                loaders: ['react-hot', 'babel-loader'],
                include: [ path.resolve(__dirname), 'ClientApp' ],
                test: /\.js$/,
                plugins: ['transform-runtime']
            }
        ]
    },
    entry: { 'main-server': './ClientApp/boot-server.js' },
    output: {
        path: path.join(__dirname, 'wwwroot', 'dist'),
        filename: '[name].js',
        publicPath: '/dist/'
    },

    plugins: [
        extractCSS,
        new webpack.DllReferencePlugin({
            context: __dirname,
            manifest: require('./wwwroot/dist/vendor-manifest.json')
        })
    ]
}, isDevelopment ? devConfig : prodConfig);

My boot-server.js:

import * as React from 'react';
import { Provider } from 'react-redux';
import { renderToString } from 'react-dom/server';
import { match, RouterContext } from 'react-router';
import createMemoryHistory from 'history/lib/createMemoryHistory';
import { createServerRenderer } from 'aspnet-prerendering';
import routes from './routes';
import configureStore from './store/configureStore';

export default createServerRenderer(params => {
    return new Promise((resolve, reject) => {
        // Match the incoming request against the list of client-side routes
        match({ routes, location: params.location }, (error, redirectLocation, renderProps) => {
            if (error) {
                throw error;
            }

            // If there's a redirection, just send this information back to the host application
            if (redirectLocation) {
                resolve({ redirectUrl: redirectLocation.pathname });
                return;
            }

            // If it didn't match any route, renderProps will be undefined
            if (!renderProps) {
                throw new Error(`The location '${params.url}' doesn't match any route configured in react-router.`);
            }

            // Build an instance of the application
            const store = configureStore();
            const app = (
                <Provider store={store}>
                    <RouterContext {...renderProps} />
                </Provider>
            );

            // Perform an initial render that will cause any async tasks (e.g., data access) to begin
            renderToString(app);

            // Once the tasks are done, we can perform the final render
            // We also send the redux store state, so the client can continue execution where the server left off
            params.domainTasks.then(() => {
                resolve({
                    html: renderToString(app),
                    globals: { initialReduxState: store.getState() }
                });
            }, reject); // Also propagate any errors back into the host application
        });
    });
});

I've ran webpack command, dotnet restore also.

Then, when I'm trying to run project from VIsual Studio, it gives me error:

Call to Node module failed with error: If you use aspnet-prerendering >= 2.0.0, you must update your server-side boot module to call createServerRenderer. Either update your boot module code, or revert to aspnet-prerendering version 1.x

It doesn't depend whether I'm running project from Visual Studio or simply dotnet run from console.

What should I do? This guide isn't really helpful, because there is no difference between my solution and proposed.

*Originally created by @YuriiNskyi on 1/31/2017* The title of issue is self-descriptive. My `webpack.config`: ``` var path = require('path'); var webpack = require('webpack'); var ExtractTextPlugin = require('extract-text-webpack-plugin'); var merge = require('extendify')({ isDeep: true, arrays: 'concat' }); var devConfig = require('./webpack.config.dev'); var prodConfig = require('./webpack.config.prod'); var isDevelopment = process.env.ASPNETCORE_ENVIRONMENT === 'Development'; var extractCSS = new ExtractTextPlugin('site.css'); module.exports = merge({ resolve: { extensions: ['', '.js', '.jsx'] }, module: { loaders: [ { test: /\.css/, loader: extractCSS.extract(['css']) }, { loaders: ['react-hot', 'babel-loader'], include: [ path.resolve(__dirname), 'ClientApp' ], test: /\.js$/, plugins: ['transform-runtime'] } ] }, entry: { 'main-server': './ClientApp/boot-server.js' }, output: { path: path.join(__dirname, 'wwwroot', 'dist'), filename: '[name].js', publicPath: '/dist/' }, plugins: [ extractCSS, new webpack.DllReferencePlugin({ context: __dirname, manifest: require('./wwwroot/dist/vendor-manifest.json') }) ] }, isDevelopment ? devConfig : prodConfig); ``` My `boot-server.js`: ``` import * as React from 'react'; import { Provider } from 'react-redux'; import { renderToString } from 'react-dom/server'; import { match, RouterContext } from 'react-router'; import createMemoryHistory from 'history/lib/createMemoryHistory'; import { createServerRenderer } from 'aspnet-prerendering'; import routes from './routes'; import configureStore from './store/configureStore'; export default createServerRenderer(params => { return new Promise((resolve, reject) => { // Match the incoming request against the list of client-side routes match({ routes, location: params.location }, (error, redirectLocation, renderProps) => { if (error) { throw error; } // If there's a redirection, just send this information back to the host application if (redirectLocation) { resolve({ redirectUrl: redirectLocation.pathname }); return; } // If it didn't match any route, renderProps will be undefined if (!renderProps) { throw new Error(`The location '${params.url}' doesn't match any route configured in react-router.`); } // Build an instance of the application const store = configureStore(); const app = ( <Provider store={store}> <RouterContext {...renderProps} /> </Provider> ); // Perform an initial render that will cause any async tasks (e.g., data access) to begin renderToString(app); // Once the tasks are done, we can perform the final render // We also send the redux store state, so the client can continue execution where the server left off params.domainTasks.then(() => { resolve({ html: renderToString(app), globals: { initialReduxState: store.getState() } }); }, reject); // Also propagate any errors back into the host application }); }); }); ``` I've ran `webpack` command, `dotnet restore` also. Then, when I'm trying to run project from VIsual Studio, it gives me error: > Call to Node module failed with error: If you use aspnet-prerendering >= 2.0.0, you must update your server-side boot module to call createServerRenderer. Either update your boot module code, or revert to aspnet-prerendering version 1.x It doesn't depend whether I'm running project from Visual Studio or simply `dotnet run` from console. What should I do? [This guide](https://github.com/aspnet/JavaScriptServices/blob/2b2465ad2eba81fda8c9eefccea55847df1af651/src/Microsoft.AspNetCore.SpaServices/README.md) isn't really helpful, because there is no difference between my solution and proposed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/JavaScriptServices#1070
No description provided.