Skip to content

Supporting SSR scenarios #460

@kamranayub

Description

@kamranayub

One of my motivations to use this is for using my .NET server as a runtime for my React frontend. In order to do that, I need to execute SSR code through Node.js in .NET and I think the two options right now are edge-js and node-api-dotnet.

I've completed a prototype of supporting React Router SSR with node-api-dotnet here:

https://github.com/kamranayub/dotnet-ssr

However, I did run into a few issues:

For the second issue, I've worked around it by patching the init.js manually and injecting a dotnetHost global, which works!

https://github.com/kamranayub/dotnet-ssr/blob/be9dc260c5cc23c31f037cc60e74872c7fd8d30a/web/patches/node-api-dotnet%2B0.9.15.patch

https://github.com/kamranayub/dotnet-ssr/blob/be9dc260c5cc23c31f037cc60e74872c7fd8d30a/src/server/NodeSsrHost.cs#L57-L71

I think this could be contributed back to the library, but not sure where/how to do that. I'm up for it if that would be accepted, I just need some guidance.

I haven't yet prototyped this with edge-js, I only know it also does in-proc communication -- what I don't know is if I can set it up like this so the SSR code can invoke .NET APIs, plus I love that this generates the typedefs which make this work great under Vite dev mode 🚀

To get that working, you need to rewrite the import paths at build time:

https://github.com/kamranayub/dotnet-ssr/blob/be9dc260c5cc23c31f037cc60e74872c7fd8d30a/web/vite.config.ts#L12-L65

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions