千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  一篇文章带你了解Nodejs

一篇文章带你了解Nodejs

来源:千锋教育
发布人:lxl
时间: 2023-02-10 15:44:07

千锋教育

     1. 什么是node.js?

  node.js是一个基于Chrome v8引擎的javascript 运行环境。Node.js使用了一个事件驱动、非阻塞式 I/O的模型,使其轻量又高效。(由c++语言编写的)Node.js的包管理器npm,成为世界上最大的开放源代码的生态系统。 简单说:编写高性能网络服务器的javascipt工具包(用于js开发服务端程序) 单线程、异步、事件驱动。

  node.js是一个Javascript运行环境(runtime)

  Node.js 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。

  Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 。

  NPM:全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。 它已经成为了非官方的发布Node模块(包)的标准。

  nodejs自身提供了基本的模块,但是开发实际应用过程中仅仅依靠这些基本模块则还需要较多的工作。幸运的是,Nodejs库和框架为我们提供了帮助,让我们减少工作量。但是成百上千的库或者框架管理起来又很麻烦,有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。

  使用NPM,必须安装NodeJS。

  安装nodejs ,去官网下载https://nodejs.org/en/,LTS为长期稳定版,下载这个即可。安装直接双击nodejs.exe,疯狂下一步即可!

  2. nodejs的特点

  快、耗内存多——-网上一个百万级并发测试,未优化的情况下1M的链接消耗了16G内存

  3. nodejs可以做什么

  node.js可以解析js代码(没有浏览器安全级别的限制),提供很多系统级别的api,如:文件的读写、进程的管理、网络通信...

  4. 为什么要学习nodejs

  1.node-webkit/内核

  2.nodeos/系统

  3.express/框架

  4.jade EJS /模版

  5.forever PM2 /实现负载均衡

  6.http://log.io/在浏览器打印各种输出的日志

  7.grunt、gulp、webpack/自动化构建工具

  8.mocha 、karma /测试工具

  9.可以辅助前端开发,代替后台开发

  Node vs php

  优点:性能高 开发效率高 应用范围广

  缺点: 新、会的人少 中间件少(函数) IDE不完善

  框架的选择

  比较热门的包括:

  Express(Sails),koa,Hapi

  Express:完善、稳定、文档全、社区大

  koa :超前(koa2)

  Hapi:复杂(一个简单的helloworld都要做很多堆砌),适合复杂的大型项目

  egg(阿里巴巴团队刚推出的)

  5. node.js安装

  Node.js版本: LTS(长时间支持版本——-推荐)

  Current(最新版本,有些api会有变动)

  6. node环境下js文件的执行

  创建index01.js文件

  console.log("hello nodejs");

  终端中进入index01.js所在目录,在终端中执行

  node index01.js

  7. nodejs模块化开发规范(commonjs)

  定义模块

  ajax.js文件

  varobj={

  get:function(){

  },

  post:function(){

  }

  }

  module.exports=obj

  加载自定义模块

  //自定义文件模块 './a.js'

  varobj=require('./ajax')

  npm安装模块

  npm常用命令

  npm -v:查看npm安装的版本。

  npm init:会引导你创建一个package.json文件,包括名称、版本、作者等信息。

  npm list:查看当前目录下已安装的node包。

  npm ls:查看当前目录下已安装的node包。

  npm install moduleNames:安装Node模块到本地目录node_modules下。

  npm install-g:将包安装到全局环境中。

  npm install--save:安装的同时,将信息写入package.json中

  项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到git时,就不用提交node_modules这个文件夹了。

  npm install--save-dev:安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据devDependencies配置安装所有的依赖包,这样代码提交到git时,就不用提交node_modules这个文件夹了。

  npm uninstall moudleName:卸载node模块。

  加载自己安装的模块

  var http=require('gulp');

  var http=require('webpack');

  加载nodejs内置模块 (不需要安装依赖)

  var http=require('http')

  8. nrm使用

  什么是nrm

  nrm 是一个 npm 源管理器,允许你快速地在 npm 源间切换

  安装nrm

  在命令行执行命令,npm install -g nrm,全局安装nrm。

  使用

  执行命令nrm ls查看可选的源

  切换

  如果要切换到taobao源,执行命令nrm use taobao

  9. Nodemon 使用

  修改代码后,需要重新启动 应用,所做的修改才能生效。若之后的每次代码修改都要重复这样的操作,势必会影响开发效率

  Nodemon,它会监测项目中的所有文件,一旦发现文件有改动,Nodemon 会自动重启应用。

  安装及使用

  全局安装 nodemon 包,这样新创建的 Node.js 应用都能使用 Nodemon 运行起来了

  npm install -g nodemon

  安装完成之后,Nodemon 就可以启动 Express 应用了,先关闭当前正在执行的应用程序,然后再执行命令:

  nodemon index.js

  默认地,nodemon会自动打开index.js。所以,也可以使用如下命令

  nodemon

  通过 Nodemon 启动应用之后,不管是修改了代码,还是安装了新的 npm 包,Nodemon 都会重新启动应用

  10. 搭建第一个服务器

  创建server.js

  // nodejs内置(原生)模块 不需要安装依赖

  //依赖模块

  var http=require('http')

  var hostname='localhost'

  var port=8000;

  var obj=require('./common')

  http.createServer((req,res)=>{

  // req==request 请求对象

  // res==response 响应对象

  //头部

  res.setHeader('content-type','text/html;charset=utf-8')

  // 状态码

  res.statusCode=200;

  console.log(req.url)

  // 过滤掉对ico图标请求,提高性能

  if(req.url!='/favicon.ico'){

  // res.write('2')

  // // 结束标识

  // res.end()

  // obj.fn1(req,res)

  say(req,res)

  }

  }).listen(port,hostname,()=>{

  console.log('服务器已经启动')

  })

  functionsay(req,res){

  res.write('你好')

  res.end()

  }

  在终端中执行server.js 文件

  node server.js

  简化版

  var http=require('http');

  http.createServer((req,res)=>{

  res.writeHead(200,{'content-type':'text/html;charset=utf-8','Access-Control-Allow-Origin':"*"})

  if(req.url!='/favicon.ico'){

  res.write('hello world')

  res.end()

  }

  }).listen(3000)

  11. Nodejs-api url

  操作:--require(‘url’)

  node url——提供很多方法

  url.parse(urlString)查询url信息

  url.format(urlObject)将信息解析成正常的url地址

  var url=require('url')

  console.log(url.parse('http://www.baidu.com/api#aaa/bb?id=1234'))

  var str={

  protocol:'http:',

  slashes:true,

  auth:null,

  host:'www.baidu.com',

  port:null,

  hostname:'www.baidu.com',

  hash:null,

  search:null,

  query:null,

  pathname:'/api',

  path:'/api',

  href:'http://www.baidu.com/api'

  }

  console.log(url.format(str))

  12. Query String

  querystring模块用于实现URL参数字符串与参数对象的互相转换,示例如下。

  require(‘querystring’)

  querystring.parse(str[, sep[, eq[, options]]])转换成对象

  querystring.stringify(obj[, sep[, eq[, options]]])转换成字符串

  var querystring=require('querystring');

  var str=querystring.stringify({'name':'hello','age':10})

  var str=querystring.parse('name=hello&age=10')

  console.log(str)

  path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块:

  var path = require("path");

  // 格式化路径

  console.log('normalization : ' + path.normalize('/test/test1//2slashes/1slash/tab/..'));

  // 连接路径

  console.log('joint path : ' + path.join('/test', 'test1', '2slashes/1slash', 'tab', '..'));

  // 转换为绝对路径

  console.log('resolve : ' + path.resolve('main.js'));

  // 路径中文件的后缀名

  console.log('ext name : ' + path.extname('main.js'));

  13. File System-node操作文件

  fs(file system)跟文件相关的方法—require(‘fs’)

  1)stat() 获取文件的一些信息

  2)mkdir() 新增目录的

  3)writeFile(url,con,fc) 书写文件

  4)appendFile(url,con,fc) 追加文件内容

  5)读取文件的内容:readFile(url,fc)

  6)列出目录的东西:readdir

  7)重命名目录或文件:rename

  8)删除目录与文件:rmdir(目录),unlink(文件) readdirSync(src) 同步读取目录信息

  var fs=require('fs')

  //获取信息的时候 错误回调优先

  fs.stat('./demo.html',(err,data)=>{

  console.log(data.isFile())

  })

  // 创建目录

  fs.mkdir('./log',()=>{

  console.log('success')

  })

  // 写入文件

  fs.writeFile('./log/mm1.log','hello',()=>{

  console.log('success')

  })

  // 追加文件内容

  fs.appendFile('./log/hello.log','----world',()=>{

  console.log('success')

  })

  // 读取文件内容

  fs.readFile('./log/hello.log',(err,data)=>{

  console.log(data.toString())

  })

  // 读取目录

  fs.readdir('./log',(err,data)=>{

  console.log(data)

  })

  // 重命名

  fs.rename('./log/hi.log','./log/his.log',()=>{

  console.log('success')

  })

  // 删除文件

  fs.unlink('./log/hello.log',()=>{

  console.log('success')

  })

  // 删除目录--删除的是空文件夹

  fs.rmdir('./logs',()=>{

  console.log('success')

  })

  //同步操作 读文件

  console.log(fs.readdirSync('./log'))

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>