2019-05-05 Nodejs总结:

一、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模块
// 前台:

     // 首先要引入第三方文件库

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 );
    });
});

vue项目启动服务配置:

在根目录创建文件夹/创建server.js

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

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
// 服务开启后访问指定编译好的dist文件下的数据
app.use(express.static(path.resolve(__dirname, '../dist')))
app.get('*', function (req, res) {
  const html = fs.readFileSync(path.resolve(__dirname, '../dist/index.html'), 'utf-8')
  res.send(html)
})
// 后端api路由
// app.use('/api', userApi);
// 监听端口
app.listen(8089)
console.log('success listen at port:8089......')

你可能感兴趣的:(2019-05-05 Nodejs总结:)