整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

nodejs搭建服务器显示静态html页面

nodejs搭建服务器显示静态html页面

提:

安装配置有node环境

一、初始化node项目

在项目的工作目录,执行命令

npm init

初始化参数设置,可以根据情况设置,或者直接全部默认也行:


初始化项目


二、安装express模块

Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站。

直接通过命令行安装

npm i express --save

G:\app-server>npm i -g express --save

+ express@4.17.1

added 2 packages from 2 contributors and updated 24 packages in 23.892s

三、编写app.js

新建一个app.js文件

var express=require('express');

var app=express();

app.use(express.static(__dirname + '/public'));

app.listen(8080, ()=> {

console.log(`App listening at port 8080`)

})

在express添加中间件,设置静态资源路径为public,所有的HTML、CSS、JS等文件都放在public下即可。默认访问public下面的index.html

新建index.html

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Web测试平台</title>

</head>

<body>

<h1>Web测试平台</h1>

</body>

</html>

四、启动服务

node app.js

即可运行

G:\app-server>node app.js

App listening at port 8080

访问ip:8080

就可以访问到index.html那个页面了哦。


好了,各位老铁。相信你一定也学会搭建这个服务器环境了哦。

有问题欢迎留言哦。一起学习。

日,我的一位同事向我寻求建议,她打算为自己构建一个博客。于是,我对静态网站生成器和博客引擎进行了一番研究,发现 Hugo 是一个很不错的选择。但是,我的同事还有一些特殊要求,比如,她想要一个自定义的博客网址和 CSS 主题。尽管这些 Hugo 都可以实现,但我并不打算花时间来学习它。我想自己创建一个简单的静态网站生成器,以便我的同事在她已经准备好的 HTML 中编写博客文章。

这个静态网站生成器的代码大约 100 行,非常简洁。它提供了详细代码和示例博客 。众所周知,GitLab 提供静态页面的免费托管服务,还带有 CI/CD 功能,它允许你在部署之前编译页面。

以下教程将带你使用 Node.js 设置自己的静态网站生成器,Node.js 的版本需要 “>=8.11.x”。

npm init
npm i --save-exact bluebird chokidar fs-extra mustache
mkdir src
mkdir public

首先,设置项目:

开始之前,我们需要弄清楚一个问题:为什么需要静态网站生成器?因为某些情况并不需要静态网站生成器。假如你的博客访问量很小,你只需简单地手工创建 HTML 页面并发布它们即可。实际上,在服务器编程兴起之前,在很长时间内这就是大多数 Web 的发布方式。但是,一旦页面和内容增加,对这些页面中的通用部分(例如页面底部)进行更改将会变得非常重复和乏味。因此,我们开始寻找一种更加理想的方法,尝试使用某种简单的模板引擎来分离常见内容,然后在特定的地方插入所需的内容。

开始研究模板引擎之前,先设置我们的网站。我们需要在项目根目录下创建 2 个文件夹 :

  1. SRC:我们当前网站所在的位置;
  2. Public:用来存放我们生成的网站。

我们的目标是将 src 目录的内容复制到 public 目录中。在项目根目录下创建 index.js 文件,其内容如下:

const Promise=require("bluebird");
const fse=require("fs-extra");
Promise.resolve().then(async ()=> {
 await main();
});
const main=async()=> {
 await generateSite();
};
const generateSite=async()=> {
 await copyAssets();
};
const copyAssets=async()=> {
 await fse.emptyDir("public");
 await fse.copy("src", "public");
};

执行命令 node index.js,即可启动该脚本。

祝贺你!此刻,你已荣升为一名后端开发人员。

接下来,我们将添加文件监视器,src 文件夹中的内容一旦发生更改就将重新生成网站。该博客总共包含 500-1000 个文件,我们可以在任何变化发生时重新生成整个网站:

const chokidar=require("chokidar");
const main=async()=> {
 await generateSite();
 watchFiles();
};
const watchFiles=()=> {
 const watcher=chokidar.watch(
 [
 "src"
 ],
 {
 ignored: /(^|[/\])../, // chokidar will watch folders recursively
 ignoreInitial: false,
 persistent: true
 }
 );
 watcher.on("change", async path=> {
 console.log("changed " + path + ", recompiling");
 await generateSite();
 });
 // catch ctrl+c event and exit normally
 process.on("SIGINT", function() {
 watcher.close();
 });
};

上面的代码清楚地说明了为什么初始版本有一个名为 generateSite 的函数。现在执行命令 node index.js 启动我们的静态网站生成器,如果在 src 目录中编辑任何文件,public 都会发生变化。此时,我们还将添加一个环境变量来区分开发和生产模式。在开发模式中,我们将关注更改情况并重新生成网站,而在生产模式中,我们只需重新生成:

const env=process.env.NODE_ENV || "dev";
const main=async ()=> {
 console.log("Running app in " + env);
 await generateSite();
 if (env==="dev") {
 watchFiles();
 }
};

我们可以执行命令 export NODE_ENV=prod || set NODE_ENV=prod && node index.js 来运行以上代码。请注意,观察源目录的更改和重新编译并不是每次都必须的,你可以跳过此步骤,只需在每次进行更改时运行脚本即可。

至此,差不多完成了!现在来说说模板。我们将使用 Mustache.js 模板,它非常简单易用,并且我们的需求并不复杂。创建一个文件夹 src/partials,用来存放网站的公共部分。然后稍微修改我们的网站结构,保证所有页面都存放在 src/pages 目录中。接下来加载页面并使用 Mustache 渲染:

const fs=require("fs");
const generateSite=async ()=> {
 await copyAssets();
 await buildContent();
};
const buildContent=async ()=> {
 const pages=await compilePages();
 await writePages(pages);
};
const compilePages=async ()=> {
 const partials=await loadPartials();
 const result={};
 const pagesDir=path.join("src", "pages");
 const fileNames=await fs.readdirAsync(pagesDir);
 for (const fileName of fileNames) {
 const name=path.parse(fileName).name;
 const fileContent=await fs.readFileAsync(path.join(pagesDir, fileName));
 result[name]=Mustache.render(fileContent.toString(), {}, partials);
 }
 return result;
};
const loadPartials=async ()=> {
 const result={};
 const partialsDir=path.join("src", "partials");
 const fileNames=await fs.readdirAsync(partialsDir);
 for (const fileName of fileNames) {
 const name=path.parse(fileName).name;
 const content=await fs.readFileAsync(path.join(partialsDir, fileName));
 result[name]=content.toString();
 }
 return result;
};
const writePages=async pages=> {
 for (const page of Object.keys(pages)) {
 await fs.writeFileAsync(path.join("public", page + ".html"), pages[page]);
 }
};

想要了解最终版本,请查看 Software Dawg 项目(https://gitlab.com/wheresvic/software-dawg)。它与本教程有一些细微差别:

  • 脚本本身位于 src 目录下。
  • 代码略超过了 100 行,大约 130 行,为了遵循简洁的代码实践风格,使用常量而不是文件夹路径的字符串。
  • 该脚本不会复制整个 src 文件夹,而只复制必要的资源,比如 CSS 文件、图片等。
  • 该项目使用 node-sass 编译模板 CSS。然而,这种依赖性不是必需的,因为已编译的 CSS 文件也被提交到了 Git。

此外,你还可以安装 browser-sync 软件包,然后通过命令 npm run live-reload 运行它,如此一来,只要有任何更改发生浏览器就会自动刷新。请注意,由于任何更改都将重新生成整个网站,因此并不适用于 Windows。

GitLab 提供静态网站免费托管,只需一个 .gitlab-ci.yml 配置文件即可。真正令人难以置信之处在于,你可以自定义构建过程,这意味着在该例中,我们可以在部署之前生成网站!有关此功能的详细信息,请参见https://about.gitlab.com/features/pages/。

本教程到此结束,我的同事对此非常满意,该方案非常灵活,它允许她根据自己的喜好进行自定义,也希望对你有所助益!

原文:https://smalldata.tech/blog/2018/08/16/building-a-simple-static-site-generator-using-node-js

作者简介:Victor Parmar,是一位全栈工程师,热爱旅行,热爱 DIY。

译者:安翔,责编:屠敏

家好,我是皮皮,今天给大家分享一些好玩的~

前言

Nodejs是GoogleV8引擎的一个JavaScript脚本语言,实际上也就是相当于服务器一样,可以解析网页内容并产生效果。它的出现令JavaScript如虎添翼,而且Node比JavaScript执行更为快速,并且支持分布式,因为它使用了事件驱动型的非阻塞式的模型。说太多反而没意思,不如我们自己搭建一个。


一、下载Nodejs

由于小编是Win7的系统,新版Nodejs不支持,不知道为什么?倒是对Win8很友好。于是小编在清华镜像下载了下来,分享给大家。这里有两个版本,一个是安装包版本(后缀是.msi)无需配置环境变量;另一个是压缩包,直接解压然后配置环境变量即可。这里小编建议大家下载安装包,考虑到有些人不懂的怎么设置环境变量,还是安装包好点,小编偷个懒也下安装包。


二、安装Nodejs

首先我们需要同意它的用户协议,然后选择安装路径,没有硬性规定非得放在系统盘,那么就请放在其它盘,如下:

然后点击下一步,会看到环境设置和安装依赖项,不用管,Next继续,如下:

然后我们会看到有一个选项,如图:

这个是让我们是否选择这个工具,选择了它就会下载,建议选上,然后等待片刻,安装立马就好了,如图:

这个时候会出现一个CMD窗口,提示我们要下载工具了,并且需要关掉所有的窗口,如图:

按回车后,完成闪退,进入CMD,输入命令获取Node版本号,若返回则说明安装成功,如下:


三、新建项目

首先创建一个文件夹,名字不要使用中文和大写字母,然后我们在该目录下打开命令提示符,并输入命令“npm init”,如下:

这里我们一步步按回车,最后输入Yes,即可创建一个Node的项目了。上面给出的都是项目的配置。打开文件夹去看看,如图:

会创建一个Json格式的文件。然后我们需要给这个项目建立一个静态的资源库,一般放置图片,HTML什么的,取名为Static好了,然后放一个HTML文件进去,取名“index.html”,至于内容随便写;然后我们需要在Json文件目录建立一个Json文件,用作启动服务器使用,先随便写一个,如图:

然后我们访问它,这个时候这个Js 文件就是服务端的程序,访问就会出结果,如图:


四、建立一个可以在浏览器中访问的服务器

上面我们所建立的只能在Node中访问,浏览器中不行,下面建立个浏览器中能访问的,这样才叫服务器吗?我们先创建一个服务器的Js文件,内容如下:

var http=require('http');
var server=http.createServer(function (req,res) 
{
res.writeHead(200, {'Content-Type': 'text/plain'}); 
res.end('Hello World\n');
});
server.listen(8080,'127.0.0.1');


console.log('Server running on http://127.0.0.1:8080/');

然后我们在CMD中启动服务,如下所示:

成功。


五、总结

看完Nodejs搭建服务器是不是觉得很简单了,不着急,更精彩的还在后面等着你,这才只是个开端而已。