Node Js

定义

Node Js 是一个运行在服务器端的JavaScript。基于一个Chrome JavaScipt 运行时建立的一个平台

特点

  • 事件驱动I/O服务端
  • 基于V8引擎
  • 速度快,性能好
  • node -v 查看node js 版本号
  • 使用common js 规范

Node使用方式

  • REPL 交互模式 在当前目录的cmd当中输入node
  • 退出交互模式 .exit
  • 或者node 直接打开文件
  • 采用require() 方法引入要使用的模块
  • 采用 module.exports 导出文件
  • 声明全局变量时,使用全局对象 global

Tip: 使用导出文件的注意事项

  • exports 默认指向 module.exports 导出作用只有module.exports才拥有。但是如果exports指向了新对象,那么就没有导出作用
  1. // 第一种
  2. module.exports = {
  3. a:a,
  4. b:b
  5. }
  6. //第二种 不推荐使用
  7. module.exports.a=a
  8. module.exports.b=b
  9. //第三种
  10. exports.a = a
  11. exports.b = b
  • 我们可以使用解构赋值来读取变量
  • 引用传递 深浅拷贝
  1. let obj = {
  2. a:1,
  3. b:2
  4. }
  5. let obj2 = obj
  6. obj2.a = "lisi" //该表obj2 会影响到obj
  7. console.log(obj2) // {a:lisi,b:2}
  8. console.log(obj) // {a:lisi,b:2}
  9. //利用解构赋值来进行浅拷贝
  10. let obj3 = { ...obj }
  11. let obj4 = Object.assign({}, obj)
  • node js 采用 common js 规范
  • 包管理的配置文件 npm init -y 或者 yarn 根据package.json重新下载依赖
  • 下载新的配置文件yarn add 或者 npm i

Node 内置模块

http 模块

定义

服务器模块

使用方法

  1. 引入内置对象 http
  2. 创建一个服务器
  3. 解决中文乱码 响应头
  4. 响应结束 end () end里面只能传字符串类型的数据且只能有一个
  5. 安排监听接口
  1. const http = require("http");
  2. const chalk = require("chalk") //改变在服务器中输出的颜色
  3. let ser = http.createServer((req,res)=> {
  4. res.writeHead(200,{"Content-type":"text/html;charset=utf-8"})
  5. res.end("hello,world")
  6. })
  7. ser.listen(3000, ()=> {
  8. console.log(123)
  9. })

fs 模块

定义

读写文件

使用方法

  1. 引入fs模块
  2. 读取写入文件时候 ./ 必须写 路径必须写全

读取文件方式

同步读取
  1. let str = fs.readFileSync("./a.txt","uft-8")
异步读取
  1. //异步读取的回调函数错误优先
  2. fs.readFile("./a.txt","uft-8",(err,data)=> {
  3. if(!err){
  4. console.log(data)
  5. }
  6. })

写入文件方式

同步写入
  1. // 写入文件
  2. fs.writeFileSync("./a.txt","rush b ","utf-8")
  3. // 追加内容
  4. fs.appendFileSync("./a.txt","今夜","utf-8")
  5. // 可以创建一个文件
  6. fs.writeFileSync("./b.txt","cccc","utf-8")
异步写入
  1. fs.writeFile("./b.txt","这是异步","utf-8",(err,data)=> {
  2. if(!err){
  3. console.log(data)
  4. }
  5. })

流方式

读取流
  1. //读取流
  2. let ws = fs.createReadStream("./a.txt")
  3. let str = ''
  4. //监听数据事件
  5. ws.on("data",(thunk)=> {
  6. str += thunk
  7. })
  8. //数据传输完成
  9. ws.on("end",()=> {
  10. console.log(str)
  11. })
写入流
  1. let ws = fs.createWriteStream("./a.txt");
  2. //写入内容
  3. ws.write("xiaolaji","utf-8")
复制一个文件
  1. const fs = require("fs");
  2. var rs = fs.createReadStream("./a.txt");
  3. var ws = fs.createWriteStream("./acopy.txt");
  4. //把rs的内容赋值到ws当中
  5. rs.pipe(ws);

创建一个服务器

  • 先引入内置对象http

  • 然后创建一个服务器,req是请求,res是响应

  • 响应头

  • 响应结束 end

  • 安排监听接口

  • 注意:res.end() 里面只能传字符串类型的数据,且只能有一个

  1. const http = require("http");
  2. const chalk = require("chalk")
  3. let ser = http.createServer((req,res)=> {
  4. res.writeHead(200,{"Content-type":"text/html;charset=utf-8"})
  5. res.end("hello,world")
  6. })
  7. ser.listen(3000, ()=> {
  8. console.log(123)
  9. })

path内置模块

path.join 与 path.resolve 的区别

  • path.join() 将多个参数字符串拼接起来合成一个路径字符串

  • path.resolve() 以程序为根目录作为起点,根据参数解析出来一个绝对路径

  • __dirname 当前目录的绝对路径

  • __filename 当前文件的绝对路径

  • path.extname 获取当前文件的扩展名

url内置模块

url.parse()方法 用于将url地址转换为一个对象

url.format() 将一个url对象转换为字符串

使用方法

  1. const express = require("express")
  2. const url = require("url")
  3. const router = express.Router()
  4. router.get("/hello",(req,res,next)=>{
  5. //第二个参数可以将query我们请求的?后面的参数转换为一个对象 在这个例子当中我们是这样访问的 /hello?n=1
  6. let obj = url.parse(req.url,true)
  7. if(obj.query.n ==1){
  8. next()
  9. }else{
  10. res.send("hello world")
  11. }
  12. })

express框架

简介

一个基于node js 的极简web框架 同种类的有 koa2 eggs adonis js

快速入门

下载express

yarn add express

核心概念:中间件(middlware)

可以拦截我们的请求,是一些先存在的函数,可以替我们完成很多工作。

存在于请求和响应中间

手写路由
  • 路由有级中间件,应用级中间件 两种
  1. //第一步 引入express模块
  2. const express = require("express")
  3. //第二步 实例化
  4. let app = express()
  5. //使用 static中间件 读取静态资源 默认读取public目录下的index.html文件
  6. app.use(express.static(path.join(__dirname,'public')))
  7. //第三步 模拟请求
  8. app.get("/hello",(req,res)=> {
  9. res.send("hello world")
  10. })
  11. //如果请求不存在的接口我们可以使用通配符来读取这个请求
  12. app.get("*",(res,req)=>{
  13. res.send("404 NotFound! 该页面不存在")
  14. })
  15. //第四步 启动端口
  16. app.listen(3000,()=>{
  17. console.log("listen 3000....")
  18. })
把我们的请求放在一个文件当中就形成了路由
  • 新建一个
  1. const express = require("express")
  2. let router = express.Router()
  3. router.get("/hello",(req,res,next)=> {
  4. res.send("hello world1")
  5. //如果存在请求路径相同的情况 会被第一个拦截 如果写next就可以访问第二个
  6. next()
  7. })
  8. router.get("/hello",(req,res)=> {
  9. res.send("hello world2")
  10. })
  11. router.get("*",(res,req)=>{
  12. res.send("404 NotFound! 该页面不存在")
  13. })
  14. module.exports = router

实际结构

文件结构

应用级中间件 根目录当中的index.js

路由级中间件

APIDOC

可以根据注释 生成一个接口文档

Node js 入门指南(1)的更多相关文章

  1. 学习Nodejs:《Node.js开发指南》微博项目express2迁移至express4过程中填的坑

    <Node.js开发指南>项目地址https://github.com/BYVoid/microblog好不容易找到的基础版教程,但书中是基于express2的,而现在用的是express ...

  2. node.js 入门实例【转】

    第1章 一个简单的博客 nswbmw edited this page 14 days ago · 38 revisions Pages 29 Home FAQ 番外篇之——使用 _id 查询 番外篇 ...

  3. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  4. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  5. 让我们一起学习《Node.js入门》一书吧!

    Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...

  6. Node.js入门实例程序

    在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...

  7. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  8. Node.js开发指南中的例子(mysql版)

    工作原因需要用到nodejs,于是找到了<node.js开发指南>这本书来看看,作者BYVoid 为清华大学计算机系的高材生,年纪竟比我还小一两岁,中华地广物博真是人才辈出,佩服. 言归正 ...

  9. Node.js入门-Node.js 介绍

    Node.js 是什么 Node.js 不是一种独立的语言,与 PHP,Python 等"既是语言优势平台"不同,它也不是一个 JavaScrip 框架,不同于 CakePHP,D ...

随机推荐

  1. 小程序scroll-view实现回到顶部

    一.wxml页面:catchtap阻止冒泡事件. <view class="gotop" hidden='{{!cangotop}}'catchtap="goTop ...

  2. String源码理解之indexOf函数

    1前言 不多说,直接上源码 2源码 我自己的理解,可能表述不清,多看几遍,不行就debug跟一遍代码自然就懂了. /** * Code shared by String and StringBuffe ...

  3. Java 多线程基础(五)线程同步

    Java 多线程基础(五)线程同步 当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题. 要解决上述多线程并发访问一个资源的安全性问题,Java中提供了同步机制 ...

  4. 关于wifi营销的看过来

    亲测可用.对于一个开发者来说,终于如获至宝.详情联系qq2455994690.源码可二开.包括微信一键关注上网,手机验证码上网.

  5. 如何控制excel单元格录入相同内容的次数?

    我们知道如果要用Excel制作让人规范填写的模板,数据有效性,Excel2013版本及以上叫数据验证是必学的技能,正好这个案例可以讲讲数据有效性的一种“高级”设置方法. 加入我们需要实现下面的要求,价 ...

  6. postman发送json数据

    原文链接:https://blog.csdn.net/weixin_33387378/article/details/90721599 1.设置header  Content-Type   appli ...

  7. 【JMeter_07】JMeter逻辑控制器__循环控制器<Loop Controller>

    循环控制器<Loop Controller> 业务逻辑: 根据所填写的循环次数,对当前节点下的取样器进行响应次数的循环请求,这里可以填写变量.整数.小数.字母.负数.各种符号等: 当填写整 ...

  8. cb20a_c++_string类型的查找

    cb20a_c++_string类型的查找s.find(args) //精确匹配,顺序查找, abc, 连续的包含在abcde,或者fabcde;s.rfind(args) //精确匹配.反向查找s. ...

  9. Redis命令速查

    目录 string list set zset hash 记录下常用的,方便查找 string 内部sds,动态扩容.小于1M加倍扩,大于1M每次扩容1M.最大长度512M. SET name val ...

  10. TestNG配合ant脚本进行单元测试

    上面就是一个简单的SSM框架的整合,数据库来自宜立方商城的e3-mall采用一个简单的spring-mvc和spring以及mybatis的整合 单元测试代码为 TestUserByTestNG.ja ...