【Web前端】【Node.js】入门

Node.js

  • 基于 Chrome V8 引擎的 JavaScript 运行环境

  • 事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

  • Node.js 的包管理器 npm,是全球最大的开源库生态系统。

  • Node.js 可以解析JS代码(没有浏览器安全级别的限制)提供很多系统级别的API,如:

    • 文件的读写
    • 进程的管理
    • 网络通信
    • ……

准备工作

方式一:安装node.js

【推荐使用方法二安装】
官网下载地址

方式二:nvm——安装和维护多个Node.js版本

  1. 方法一:github——终端利用指令下载
  2. 方法二:github——下载安装包下载
windows 配置
  1. 配置环境变量:
    NVM_HOME: D:\program_code\nvm
     NVM_SYMLINK: D:\program_code\nodejs
    把配置好的两个环境变量两边加上百分号,用分号隔开然后加入到PATH中;%NVM_HOME%;%NVM_SYMLINK%;
  2. 添加淘宝镜像 加速
    在nvm安装路径下的setting.txt文件中,添加:
    node_mirror: https://npm.taobao.org/mirrors/node/ 
    npm_mirror: https://npm.taobao.org/mirrors/npm/
    
mac配置
  • 环境变量配置(参考官网)

    export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
    
  • 配置加速路径 (在.bash_profile中)

    export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
    

在这里插入图片描述
使用方法:

  1. 查看当前node版本:nvm ls-remote
  2. 安装某一版本node:nvm install 版本号 nvm install 8.0.0
  3. 安装最新的lts版本:nvm install --lts
  4. 安装最新的current版本:nvm install node
  5. 查看已经安装的版本:nvm ls
  6. 查看当前使用node版本:node -v
  7. 使用某一版本:nvm use 版本号

命令行

  • 使用$ node 进入命令行
  • 输入process 查看可以使用的属性和方法
  1. 在浏览器和node命令行中运行代码
    function add(x, y){
    console.log(x+y);
    }
    add(3, 4)

  2. 在浏览器和node命令行里调用 window, process 两个对象

执行.js文件

1、编写 index.js 文件
console.log(‘hello’);
function add(x,y) {
console.log(x+y);
}
add(6,7);

2、node index.js 执行代码
3、安装nodemon, 实时侦测文件的变化

  • 安装nodemon:npm install nodemon -g (-g:全局范围内安装,这样任何目录下都可以使用npm命令)

  • 安装使用淘宝镜像【npm.taobao.org

    • 使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
      $ npm install -g cnpm --registry=https://registry.npm.taobao.org
      
      • 使用cnpm
      cnpm install nodemon -g
      
  • nodemon index.js 实时侦测出文件的变化

  • 使用不同版本的Node.js

    nvm ls
    nvm run v6.11.2
    
    • 可以使用配置文件指定版本号:
      1. 在.nvmrc文件中输入版本号
      2. 终端输入:nvm use
  • 创建一个.nvmrc 版本文件, 文件内容为:8.4.0

    nvm run node –version
    cat .nvmrc
    nvm use
    

CommonJS

  • JS开发规范:CommonJS 官方文档
    在这里插入图片描述
  • 模块分为三大类:
    在这里插入图片描述

模块/包——提供各种功能 官方文档

  • 【npm初始化】
  1. 引入内置的js模块/包

    const os = require('os')
    console.log(os.hostname())
    
  2. 引入第三方模块/包
    下载安装request包:npm install request -g

    const request = require('request')
    
    request({
      url: 'https://api.douban.com/v2/movie/top250',
      json: true
    }, (error, response, body) => {
      console.log(JSON.stringify(body, null, 2));
    })
    
  3. 引入自定义的模块/包
    【创建】src文件夹,其下创建greeting.js module.exports.hello = hello

    	const hello = () => {
    	  console.log('hello ~');
    	}
    	
    	module.exports.hello = hello
    

    【调用】 路径:./src/greeting.js

    const greeting = require('./src/greeting.js')
    
    greeting.hello()
    

【npm】

  • 查询包的版本信息 npm info 包名
  • 查询源:nrm ls
  • 测试源的速度:nrm test
  • 切换源:nrm use
  • package.json中的配置说明
    1. “^1.8.3” 表示1固定不变的最新版本
    2. “~1.8.3” 表示1.8不变的最新版本
    3. “*” 表示当前最新版本

使用入门

创建第一个Web服务器

URL

  • url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
    第二个参数表示是否解析query
    第三个参数表示是否解析host

  • url.format(urlObject) : 将url对象信息解析为url,与第一个操作相反

  • url.resolve(from, to) : 将两段url变成一个完整的url

Query String

  • querystring.stringify(obj[, sep[, eq[, options]]]) —— 用于解析和格式化 URL 查询字符串:JSON对象转为字符串

在这里插入图片描述

  • querystring.parse(str[, sep[, eq[, options]]])——解析字符串
    在这里插入图片描述

  • querystring.escape(str) —— 将字符串转化为浏览器能够识别的编码
    提供给querystring.stringify()使用的,通常不直接使用,之所以对外开放,是为了在需要时可以通过querystring.escape赋值一个函数来重写编程的实现

  • querystring.unescape(str) —— 在给定的 str 上执行 URL 百分比编码字符的解码
    unescape() 方法由 querystring.parse() 使用,通常不会被直接地使用。 它的导出主要是为了允许应用程序代码在需要时通过将 querystring.unescape 赋值给替代函数来提供替换的解码实现。
    在这里插入图片描述

HTTP

node-get()方法——http爬虫

const https = require('https');

https.get('https://encrypted.google.com/', (res) => {
  console.log('状态码:', res.statusCode);
  console.log('请求头:', res.headers);

  res.on('data', (d) => {
    process.stdout.write(d);
  });

}).on('error', (e) => {
  console.error(e);
});
  • http/https get方法 —— https.get(url[, options][, callback])
var http = require('http')
var https = require('https')
var url = 'https://www.lagou.com/'

https.get(url, function(res){
  var html = ''
  res.on('data', function(data){
    html += data
  })

  res.on('end', function(){
    var result = filterMenu(html)
    printMenu(result)
  })

  res.on('error', function(err){
    console.log(err)
  })
})
  • cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端操作DOM
var cheerio = require('cheerio')

function filterMenu(html) {
  var $ = cheerio.load(html)
  var menu = $('.menu_main')
  var menuData = []
  menu.each(function(index, value){
    var menuTitle = $(value).find('h2').text()
    var menuLists = $(value).find('a')
    var menuList = []
    menuLists.each(function(index, value){
      menuList.push($(value).text())
    })
    menuData.push({
      menuTitle: menuTitle,
      menuList: menuList
    })
  })
  return menuData;
}

function printMenu(menu) {
  menu.forEach(function(value){
    console.log(value.menuTitle + '\n')
    value.menuList.forEach(function(value){
      console.log(value)
    })
  })
}

http-request——get获取异步数据

  • https.request(url[, options][, callback])
const https = require('https');

const options = {
  hostname: 'encrypted.google.com',
  port: 443,
  path: '/',
  method: 'GET'
};

const req = https.request(options, (res) => {
  console.log('状态码:', res.statusCode);
  console.log('请求头:', res.headers);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (e) => {
  console.error(e);
});
req.end();
  • 使用 URL 作为 options 的示例:
const options = new URL('https://abc:xyz@example.com');

const req = https.request(options, (res) => {
  // ...
});

nodejs request——post方法提交表单

事件

const EventEmitter = require('events')

class Player extends EventEmitter {}

var player = new Player()

player.once('play', (track) => {
  console.log(`正在播放:《${track}》`)
})

player.emit('play', '精绝古城')
player.emit('play', '黄皮子坟')

文件系统

  • 得到文件与目录的信息:stat

    const fs = require('fs')
    
    fs.stat('hello.js', (error, stats) =>{
      if(error){
        console.log(error)
      } else {
        console.log(stats)
        console.log(`文件:${stats.isFile()}`)
        console.log(`目录:${stats.isDirectory()}`)
      }
    })
    

在这里插入图片描述

  • 创建一个目录:mkdir

    const fs = require('fs')
    
    fs.mkdir('logs', (error) => {
      if(error){
        console.log(error)
      } else {
        console.log('成功创建目录:logs')
      }
    })
    
  • 创建文件并写入内容:writeFile,appendFile

    const fs = require('fs')
    
    fs.writeFile('logs/hello.log', '您好 ~ \n', (error) => {
      if(error) {
        console.log(error)
      } else {
        console.log('成功写入文件')
      }
    })
    
    fs.appendFile('logs/hello.log', 'hello ~ \n', (error) => {
      if(error) {
        console.log(error)
      } else {
        console.log('成功写入文件')
      }
    })
    
  • 读取文件的内容:readFile

    const fs = require('fs')
    
    fs.readFile('logs/hello.log', 'utf8', (error, data) =>{
      if (error) {
        console.log(error)
      } else {
        console.log(data)
      }
    })
    
  • 列出目录的东西:readdir

    const fs = require('fs')
    
    fs.readdir('logs', (error, files) => {
      if (error) {
        console.log(error)
      } else {
        console.log(files)
      }
    
  • 重命名目录或文件:rename

    const fs = require('fs')
    
    fs.rename('logs/hello.log', 'logs/greeting.log', (error) =>{
      if (error) {
        console.log(error)
      } else {
        console.log('重命名成功')
      }
    })
    
  • 删除目录与文件:rmdir,unlink

    const fs = require('fs')
    
    fs.readdirSync('logs').map((file) => {
      fs.unlink(`logs/${file}`, (error) => {
        if (error) {
          console.log(error)
        } else {
          console.log(`成功的删除了文件: ${file}`)
        }
      })
    })
    
    fs.rmdir('logs', (error) =>{
      if (error) {
        console.log(error)
      } else {
        console.log('成功的删除了目录:logs')
      }
    })
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值