NodeJS03

Node.js 的常用模块

1. events模块

事件驱动是node.js的基本特点,因此events模块非常重要。使用events模块分为3步:实例化事件监听器;注册事件;触发事件。

const Events = require('events');     // 也常写作:const EventEmitter = ...
const Listener = new Events();      // 实例化事件监听器

// 注册事件
Listener.on('click', function(param){        // 也可以: Listener.once('click', ...)
    console.log('触发了点击', param);
});

// 触发事件
Listener.emit('click', 'demo');
// 再次触发事件(注册时为 Listener.on('click', ...)可二次触发)
Listener.emit('click', 'demo1')
2. fs模块

fsFile System的缩写,也就是node.js用来操作系统文件的模块。

// 第一个参数使用为path
fs.readFile()
fs.writeFile()
fs.appendFile()     // 追加写入
fs.unlink()    // 删除文件,不能删除文件夹
fs.mkdir()
fs.readdir()
fs.rmdir()   // 删除文件夹
3. stream模块

streamEventEmitter的实例,所以本质上是一个Listener。常用的事件有:

data: 当有数据可读时触发;
end: 当没有更多数据可读时触发;
error: 读取或写入时发生错误时触发;
finish: 所有数据都写入系统底层时触发。

node.js中有4种类型的stream:

Readable: 可读
Writable: 可写
Duplex: 可读可写
Transform: 数据转换
4. http模块

主要用于创建HTTP服务器处理请求;创建HTTP客户端发出请求。

5. express模块

express是一个web应用框架,主要用于创建各种web应用,使用express可以快速地搭建一个完整功能的网站。express框架的核心特性如下:

  • 通过设置中间件来处理HTTP请求
  • 通过路由来执行不同的HTTP请求操作
  • 通过模板来渲染HTML页面
6. 留言板

首先,搭建一个环境:

>>> mkdir express-example
>>> cd express-example
>>> npm init -y
>>> npm install express body-parser ejs --save

index.js

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// 设置ejs模板引擎. 『express 支持 jade, pug, mustache, ejs』
app.set('view engine', 'ejs');
// 设置模板文件目录
app.set('views', './templates');

app.use(bodyParser());     // 请求体解析中间件配置

const messages = []    // 留言内容

// -------设置路由-------
// 首页路由
app.get('/', (req, res)=>{
	res.render('index', {messages});
});

// 留言页路由
app.route('/publish')
	.get((req, resp)=>{
		resp.render('publish');   // 渲染HTML页面
	})
	.post((req, resp)=>{
		if (!req.body.name || !req.body.content){
			throw new Error('请将所有选项填写完整!');
		}
		const now = (new Date()).toLocaleString();
		messages.push({
			name: req.body.name,
			content: req.body.content,
			time: now   // 留言事件
		});
		resp.redirect('/');   // 重定向到首页
	});

// --------开启监听----------
app.listen(8080, ()=>{
	console.log('listen on 8080');
});

templates/index.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>留言列表</title>
</head>
<body>
	<a href="/publish">发表留言</a>
	<% if (messages.length === 0) {%>
	<p>当前没有留言</p>
	<% } else { %>
	<table>
		<tr>
	        <th>留言时间</th>
			<th>留言人</th>
			<th>留言内容</th>
		</tr>
		<% messages.forEach((message) => { %>
		<tr>
			<td><%= message.time%></td>
			<td><%= message.name%></td>
			<td><%= message.content%></td>
		</tr>
		<% }) %>
	</table>
	<% } %>
</body>
</html>

templates/publish.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>发表留言</title>
</head>
<body>
	<form action="/publish" method="POST" enctype="application/x-www-urlencoded">
		<fieldset>
			<legend>发表留言</legend>
			<div>
				<label for="name">姓名</label>
				<input type="text" name="name" id="name" required>
			</div>
			<div>
				<label for="content">内容</label>
				<textarea name="content"></textarea>
			</div>
			<div>
				<button type="submit">发表</button>
				<button type="reset">重置</button>
			</div>
		</fieldset>
	</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值