Nodejs 输出静态页面

发布于 1周前 作者 yibo5220 来自 nodejs/Nestjs

Nodejs 输出静态页面

不懂 seo,但是推广说每个详情页这种都想输出成静态页面,为了收录多

想了想,感觉用 node+模板搭个中间层是不是就能搞定?生成了不光展示,让直接输出到固定目录?

没实践过,只是想了想,有没有实践过的兄弟出来聊聊

15 回复

如果我没有理解地错的话,python + frozen flask 就可以实现你说的功能,flask 定义路由,使用 jinja2 模板,直接生成静态文件,文档见:

https://pythonhosted.org/Frozen-Flask/


好陌生, 不过可以研究下。

可以用 hexo,我也写过一个 https://github.com/xcatliu/pagic

对于 SEO,你要的并不是静态页面(生成 html 文件),而是服务端渲染。

Node 下推荐用 njk。
http://mozilla.github.io/nunjucks/

谢谢上面几个大佬指点

express 支持服务端渲染,只是看你选什么模板引擎而已(pug,handlebars,ejs…还有好多),koa 还有其他几个框架可能需要引入三方包才支持.

这个我倒是知道,就是对 seo 这块不太了解到底怎么样才是他想要的。 听 5 楼的意思只要服务端渲染就可以了 那就简化了我的问题~ 谢啦

我开始还以为必须生成出来一堆 html 放缓存里才行

我可能说的有点乱毕竟小菜鸟~~~

一般来说,伴随 SEO 的问题是要求页面再大量请求下也能访问到,这个时候需要 CDN,你不生成静态页,就靠服务端渲染,服务端渲染说白了就是服务器吐出全部的 html 内容嘛,这个性能是瓶颈,能顶住?

我以为会自己进缓存…难道五楼的意思不是吗…

一张口就来性能、CDN。。。

我只是根据楼主的提问(比较小白,看起来网站也是起步阶段)提出具体的建议。从技术方案上讲,服务端渲染的页面相对来说更简单一点,退一步讲服务端渲染与生成静态页(把服务器端渲染的内容保存为文件)也并不冲突。

前一段时间我就吐槽过现在的程序员为了性能不惜代价,大炮打蚊子的情况数不胜数。技术谁都能学会,但能把技术用得恰到好处的并不多。

在 Node.js 中输出静态页面通常涉及设置一个简单的 HTTP 服务器,并将 HTML 文件内容发送到客户端。以下是一个使用 Node.js 内置模块 httpfs(文件系统)来输出静态页面的示例代码:

const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer((req, res) => {
    // 假设静态页面存放在 ./public 目录下
    const rootDir = './public';

    // 解析请求的 URL 路径
    let filePath = '.' + req.url;
    if (filePath == './') {
        filePath = './public/index.html';
    }

    // 将相对路径转换为绝对路径
    const absPath = path.join(rootDir, path.relative('.', filePath));

    // 读取文件内容并返回给客户端
    fs.readFile(absPath, (err, data) => {
        if (err) {
            res.writeHead(404);
            res.end('File not found');
        } else {
            const extname = path.extname(absPath);
            let contentType = 'text/html';
            switch (extname) {
                case '.js':
                    contentType = 'text/javascript';
                    break;
                case '.css':
                    contentType = 'text/css';
                    break;
                // 可以根据需要添加更多的 MIME 类型
            }
            res.writeHead(200, { 'Content-Type': contentType });
            res.end(data);
        }
    });
});

server.listen(3000, () => {
    console.log('Server is listening on port 3000');
});

这个示例中,服务器会监听端口 3000,并将 ./public 目录下的文件作为静态资源提供给客户端。你可以根据需要修改代码,以支持更多的文件类型和更复杂的路由逻辑。

回到顶部