一、NodeJS简介
- NodeJS是运行在服务器端的JavaScript,它为JavaScript在服务器端运行提供了环境。
二、http模块
它是NodeJS的内置模块, 使用时,通过 const http = require("http") 直接引入
http.createServer(function(req,res){}).listen(80);
三、fs模块
它是NodeJS的内置模块, 使用时,通过 const fs = require("http") 直接引入
fs.readFile( url, function( err, data ){} );
读取文件: 读取url所指定文件中的内容
- fs.writeFile( url, cont, function( err ){} );
写入文件: 把cont中的内容写入到url所指定的文件中去,
如果文件不存在,则创建这个文件
如果文件中原来有内容,则会被覆盖掉
四、path模块
// 1. 它是NodeJS的内置模块, 使用时,通过 const path = require("path") 直接引入
// 2. path.join()
// var url = path.join("/foo","child",'cc',"./index.html"); // 返回: "\foo\child\cc\index.html"
// var url = path.join("/foo","child",'cc',"../index.html"); // 返回: "\foo\child\index.html"
// 3. path.resolve()
// var url = path.resolve('/foo', '/bar', 'baz') //返回: "G:\bar\baz"
// var url = path.resolve('/foo/bar', './baz'); // 返回: 'G:/foo/bar/baz'
// var url = path.resolve('/foo/bar', '/tmp/file/'); // 返回: 'G:/tmp/file'
// 注意: 如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上。
// 4. path.extname() -> 获取指定路径中文件的后缀名
// var ext = path.extname("./app/index.html"); // 返回: ext的值为 .html
五、全局变量
__dirname : 返回当前文件所在的完整目录
__filename : 返回当前文件所在的完整路径,包括自己的文件名
六、mime模块
它是第三方模块,使用时,需要先安装这个模块: npm install mime
使用时,通过 var mime = require("mime")
mime.getType( str ) : 接收一个字符串,示例: ./app/index.html 返回值: text/html 即文档类型
七、url模块
它是NodeJS的内置模块, 使用时,通过 const URL = require("url") 直接引入
-
var result = url.parse( req.url, true ) : 把客户端发来请求的url转化为对象,第二个参数true决定请求参数是否被转化为对象
result.pathname -> 请求的url中,从根目录开始的路径(不带参数)
result.query -> 请求的参数
注意: 这个url模块在使用时,很容易和req.url(请求的url)名字冲突,因此这里建议写成大写
八、util模块
它是NodeJS的内置模块, 使用时,通过 const util = require("util") 直接引入
util.inspect( obj ) : 是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
util.isArray(object) : 如果给定的参数 "object" 是一个数组返回true,否则返回false。
util.isRegExp(object) : 如果给定的参数 "object" 是一个正则表达式返回true,否则返回false。
util.isDate(object) : 如果给定的参数 "object" 是一个日期返回true,否则返回false。
九、模块化开发规范CommonJS
- 定义模块
// app/demo.js
function demo(){
console.log("这是自定义的模块");
}
exports.demo = demo;
module.exports = demo;
注意:
exports: 一般用来暴露属性和方法
module.exports: 一般用来暴露变量
使用模块
使用NodeJS的内置模块 -> const http = require("http");
使用第三方模块 -> const mime = require("mime");
使用用户自定义模块 -> const demo = require("./app/demo");
注意: 使用用户自定义模块时,相对路径必须加 .
如果要引入一个JSON文件,那么必须带后缀名( require("./app/demo.json) )
十、nodemon模块
使用node构建的服务器,当代码有所改动时,必须手动重启服务器,才能让改动的代码生效,
nodemon则可以监听到代码有改动时,自动重启服务器,它是一个命令安装 npm install nodemon -g
十一、NodeJS搭建服务器的框架 -> express
首先安装 express 模块 -> npm install express --save-dev
使用时,引入模块 -> const express = require("express");
快速搭建服务器的主要代码:
var express = require('express');
var app = express();
app.use(express.static('app')); // 处理静态请求 也可自定义使用中间件
app.get('/', function (req, res) { // 处理get请求
console.log("主页 GET 请求");
res.send('Hello GET');
})
app.post('/', function (req, res) { // 处理POST 请求
console.log("主页 POST 请求");
res.send('Hello POST');
})
var server = app.listen(3000, function () { // 开启监听端口
var host = server.address().address;
var port = server.address().port;
console.log("应用实例,访问地址为 http://%s:%s", host, port);
});
- express应用生成器 -> npm install express-generator -g
安装后,即可在全局使用express命令来快速构建一个应用的骨架
常用命令:
<1>. express -h : 查看帮助
<2>. express -e myApp : -e表示使用ejs模板引擎,myApp是存放应用的根目录
<3>. cs myApp -> npm install -> npm start
十二、NodeJS实现爬虫程序
安装request模块 -> npm i request --save-dev
安装cheerio模块 -> npm i cheerio --save-dev
基本使用示例:
var request = require("request");
var cheerio = require("cheerio");
request("http://www.biyao.com/home/index.html?source=pc-bdpz", function( err, res, body ){
// console.log( body ); // 爬取到指定网址的页面html内容
// console.log( res );
var $ = cheerio.load( body ); // 获取文档对象
});
十三、WebSocket全双工通讯协议
// 前台:
// WebSocket是HTML5中新增的全局对象,因此不需要引入任何包,即可使用。当new之后,就表示与服务器建立了连接,会触发open事件
var ws = new WebSocket( "ws://127.0.0.1:80" );
// open事件, 对象的方法, 与服务器建立连接后触发
ws.onopen = function(){
subBtn.onclick = function(){
ws.send( inputObj.value );
}
}
// message事件, 当接收到服务器发来的消息时触发
ws.onmessage = function( ev ){
p1.innerHTML = ev.data;
}
// close事件, 当与服务器断开连接时触发
ws.onclose = function(){
alert("连接已经关闭");
}
// 后台:
var http = require("http"); // NodeJS内置的http模块,用来构建服务器
var express = require("express"); // 需要先安装express模块 npm install express --save
var WebSocket = require("ws"); // 需要先安装ws模块 npm install ws --save
var app = express();
app.use( express.static( __dirname ) );
// 注意: 下面这两句是ws的固定格式
var server = http.createServer( app );
var wss = new WebSocket.Server( {server} );
// wss表示与服务器建立连接的全部客户端, ws表示当前连接的这个客户端,wss.clients表示全部的客户通道
wss.on("connection", function( ws ){
ws.on("message", function( data ){
setTimeout(function(){
wss.clients.forEach(function( client ){
client.send( "服务器主动推送的消息" + data );
});
}, 1000);
});
});
server.listen( 80, function(){
console.log("服务器已经启动");
});
十四、socket.io模块
// 前台:
<script src="./js/socket.io.js"></script> // 首先要引入第三方文件库
var socket = io("http://localhost:80"); // 与服务器建立连接
loginBtn.onclick = function(){
socket.emit("user", loginIpt.value ); // 向服务器发送消息, user 为自定义的事件名称
}
socket.on("ok", function( data ){ // 监听服务器发来的消息 ok 为服务器定义的事件名称
resObj.innerHTML = data;
});
// 后台:
var http = require("http");
var express = require("express");
var io = require("socket.io"); // 需要先安装此模块 npm install socket.io --save
var app = express();
app.use( express.static( __dirname ) );
var server = http.createServer( app );
var ws=io( server );
server.listen(80, function(){
console.log("服务器已经启动");
});
ws.on("connection",function(socket){
console.log("有人上线了");
socket.on("user", function( data ){
socket.emit("ok", "您的用户名为" + data );
});
});