有什么方法可以使用pure node.js/react没有Express.js进行服务器端渲染?

发布于 2025-02-03 03:10:16 字数 1150 浏览 3 评论 0 原文

我在服务器端渲染中看到的所有示例涉及Express.js类似于此示例,在server.js文件中:

import path from "path";
import fs from "fs";

import React from "react";
import ReactDOMServer from "react-dom/server";
import express from "express";

import App from "../src/App";

const PORT = process.env.PORT || 3000;
const app = express();

app.get("/", (req, res) => {
  fs.readFile(path.resolve("./public/index.html"), "utf8", (err, data) => {
    if (err) {
      console.error(err);
      return res.status(500).send("An error occurred");
    }

    return res.send(
      data.replace(
        '<div id="root"></div>',
        `<div id="root">${ReactDOMServer.renderToString(<App />)}</div>`
      )
    );
  });
});

app.use(
  express.static(path.resolve(__dirname, ".", "dist"), { maxAge: "30d" })
);

app.listen(PORT, () => {
  console.log(`Server is listening on port ${PORT}`);
});

但是我想知道这是否可以纯粹用node.js来实现。我不明白为什么不能。但是,当我尝试使用require()函数和节点模块编写时,我永远无法正常工作。是否有人对可以做的事情有一个可行的解决方案,既可以从react react前端导入app.js,又要在node.js中纯粹编写此代码,

谢谢!

All the examples I've seen for server side rendering involve express.js similar to this example, in the server.js file:

import path from "path";
import fs from "fs";

import React from "react";
import ReactDOMServer from "react-dom/server";
import express from "express";

import App from "../src/App";

const PORT = process.env.PORT || 3000;
const app = express();

app.get("/", (req, res) => {
  fs.readFile(path.resolve("./public/index.html"), "utf8", (err, data) => {
    if (err) {
      console.error(err);
      return res.status(500).send("An error occurred");
    }

    return res.send(
      data.replace(
        '<div id="root"></div>',
        `<div id="root">${ReactDOMServer.renderToString(<App />)}</div>`
      )
    );
  });
});

app.use(
  express.static(path.resolve(__dirname, ".", "dist"), { maxAge: "30d" })
);

app.listen(PORT, () => {
  console.log(`Server is listening on port ${PORT}`);
});

But I was wondering if this can be achieved purely with node.js. I don't see why it can't. But when I tried writing it in with require() functions and node modules I never could get it working. Does anyone have a working solution of what could be done, to both import the App.js from react front end, and to write this code purely in node.js

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鯉魚旗 2025-02-10 03:10:16

Express只是一个简化某些工作流程的JS软件包,在这种情况下,请聆听并响应HTTP请求。
因此,是的,您可以无需使用Express就可以做到这一点。
简单的互联网搜索将显示一些教程。
以下是Duck Duck Go搜索“ Nodejs如何在没有Express的情况下服务”的前2个结果。

Express is just a JS package to simplify certain workflow, in this case, listening and responding to an http request.
So yes, you can do it without using express.
A simple internet search will show some tutorials.
Below are top 2 results from Duck Duck Go search of "nodejs how to serve without express".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文