Node js 入门指南(1)
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指向了新对象,那么就没有导出作用
// 第一种
module.exports = {
a:a,
b:b
}
//第二种 不推荐使用
module.exports.a=a
module.exports.b=b
//第三种
exports.a = a
exports.b = b
- 我们可以使用解构赋值来读取变量
- 引用传递 深浅拷贝
let obj = {
a:1,
b:2
}
let obj2 = obj
obj2.a = "lisi" //该表obj2 会影响到obj
console.log(obj2) // {a:lisi,b:2}
console.log(obj) // {a:lisi,b:2}
//利用解构赋值来进行浅拷贝
let obj3 = { ...obj }
let obj4 = Object.assign({}, obj)
- node js 采用 common js 规范
- 包管理的配置文件 npm init -y 或者 yarn 根据package.json重新下载依赖
- 下载新的配置文件yarn add 或者 npm i
Node 内置模块
http 模块
定义
服务器模块
使用方法
- 引入内置对象 http
- 创建一个服务器
- 解决中文乱码 响应头
- 响应结束 end () end里面只能传字符串类型的数据且只能有一个
- 安排监听接口
const http = require("http");
const chalk = require("chalk") //改变在服务器中输出的颜色
let ser = http.createServer((req,res)=> {
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"})
res.end("hello,world")
})
ser.listen(3000, ()=> {
console.log(123)
})
fs 模块
定义
读写文件
使用方法
- 引入fs模块
- 读取写入文件时候 ./ 必须写 路径必须写全
读取文件方式
同步读取
let str = fs.readFileSync("./a.txt","uft-8")
异步读取
//异步读取的回调函数错误优先
fs.readFile("./a.txt","uft-8",(err,data)=> {
if(!err){
console.log(data)
}
})
写入文件方式
同步写入
// 写入文件
fs.writeFileSync("./a.txt","rush b ","utf-8")
// 追加内容
fs.appendFileSync("./a.txt","今夜","utf-8")
// 可以创建一个文件
fs.writeFileSync("./b.txt","cccc","utf-8")
异步写入
fs.writeFile("./b.txt","这是异步","utf-8",(err,data)=> {
if(!err){
console.log(data)
}
})
流方式
读取流
//读取流
let ws = fs.createReadStream("./a.txt")
let str = ''
//监听数据事件
ws.on("data",(thunk)=> {
str += thunk
})
//数据传输完成
ws.on("end",()=> {
console.log(str)
})
写入流
let ws = fs.createWriteStream("./a.txt");
//写入内容
ws.write("xiaolaji","utf-8")
复制一个文件
const fs = require("fs");
var rs = fs.createReadStream("./a.txt");
var ws = fs.createWriteStream("./acopy.txt");
//把rs的内容赋值到ws当中
rs.pipe(ws);
创建一个服务器
先引入内置对象http
然后创建一个服务器,req是请求,res是响应
响应头
响应结束 end
安排监听接口
注意:res.end() 里面只能传字符串类型的数据,且只能有一个
const http = require("http");
const chalk = require("chalk")
let ser = http.createServer((req,res)=> {
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"})
res.end("hello,world")
})
ser.listen(3000, ()=> {
console.log(123)
})
path内置模块
path.join 与 path.resolve 的区别
path.join() 将多个参数字符串拼接起来合成一个路径字符串
path.resolve() 以程序为根目录作为起点,根据参数解析出来一个绝对路径
__dirname 当前目录的绝对路径
__filename 当前文件的绝对路径
path.extname 获取当前文件的扩展名
url内置模块
url.parse()方法 用于将url地址转换为一个对象
url.format() 将一个url对象转换为字符串
使用方法
const express = require("express")
const url = require("url")
const router = express.Router()
router.get("/hello",(req,res,next)=>{
//第二个参数可以将query我们请求的?后面的参数转换为一个对象 在这个例子当中我们是这样访问的 /hello?n=1
let obj = url.parse(req.url,true)
if(obj.query.n ==1){
next()
}else{
res.send("hello world")
}
})
express框架
简介
一个基于node js 的极简web框架 同种类的有 koa2 eggs adonis js
快速入门
下载express
yarn add express
核心概念:中间件(middlware)
可以拦截我们的请求,是一些先存在的函数,可以替我们完成很多工作。
存在于请求和响应中间
手写路由
- 路由有级中间件,应用级中间件 两种
//第一步 引入express模块
const express = require("express")
//第二步 实例化
let app = express()
//使用 static中间件 读取静态资源 默认读取public目录下的index.html文件
app.use(express.static(path.join(__dirname,'public')))
//第三步 模拟请求
app.get("/hello",(req,res)=> {
res.send("hello world")
})
//如果请求不存在的接口我们可以使用通配符来读取这个请求
app.get("*",(res,req)=>{
res.send("404 NotFound! 该页面不存在")
})
//第四步 启动端口
app.listen(3000,()=>{
console.log("listen 3000....")
})
把我们的请求放在一个文件当中就形成了路由
- 新建一个
const express = require("express")
let router = express.Router()
router.get("/hello",(req,res,next)=> {
res.send("hello world1")
//如果存在请求路径相同的情况 会被第一个拦截 如果写next就可以访问第二个
next()
})
router.get("/hello",(req,res)=> {
res.send("hello world2")
})
router.get("*",(res,req)=>{
res.send("404 NotFound! 该页面不存在")
})
module.exports = router
实际结构
文件结构
应用级中间件 根目录当中的index.js
路由级中间件
APIDOC
可以根据注释 生成一个接口文档
Node js 入门指南(1)的更多相关文章
- 学习Nodejs:《Node.js开发指南》微博项目express2迁移至express4过程中填的坑
<Node.js开发指南>项目地址https://github.com/BYVoid/microblog好不容易找到的基础版教程,但书中是基于express2的,而现在用的是express ...
- node.js 入门实例【转】
第1章 一个简单的博客 nswbmw edited this page 14 days ago · 38 revisions Pages 29 Home FAQ 番外篇之——使用 _id 查询 番外篇 ...
- Node.js 入门手册:那些最流行的 Web 开发框架
这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...
- 【特别推荐】Node.js 入门教程和学习资源汇总
这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...
- 让我们一起学习《Node.js入门》一书吧!
Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...
- Node.js入门实例程序
在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...
- Node.js 入门教程和学习资源汇总
这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...
- Node.js开发指南中的例子(mysql版)
工作原因需要用到nodejs,于是找到了<node.js开发指南>这本书来看看,作者BYVoid 为清华大学计算机系的高材生,年纪竟比我还小一两岁,中华地广物博真是人才辈出,佩服. 言归正 ...
- Node.js入门-Node.js 介绍
Node.js 是什么 Node.js 不是一种独立的语言,与 PHP,Python 等"既是语言优势平台"不同,它也不是一个 JavaScrip 框架,不同于 CakePHP,D ...
随机推荐
- 小程序scroll-view实现回到顶部
一.wxml页面:catchtap阻止冒泡事件. <view class="gotop" hidden='{{!cangotop}}'catchtap="goTop ...
- String源码理解之indexOf函数
1前言 不多说,直接上源码 2源码 我自己的理解,可能表述不清,多看几遍,不行就debug跟一遍代码自然就懂了. /** * Code shared by String and StringBuffe ...
- Java 多线程基础(五)线程同步
Java 多线程基础(五)线程同步 当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题. 要解决上述多线程并发访问一个资源的安全性问题,Java中提供了同步机制 ...
- 关于wifi营销的看过来
亲测可用.对于一个开发者来说,终于如获至宝.详情联系qq2455994690.源码可二开.包括微信一键关注上网,手机验证码上网.
- 如何控制excel单元格录入相同内容的次数?
我们知道如果要用Excel制作让人规范填写的模板,数据有效性,Excel2013版本及以上叫数据验证是必学的技能,正好这个案例可以讲讲数据有效性的一种“高级”设置方法. 加入我们需要实现下面的要求,价 ...
- postman发送json数据
原文链接:https://blog.csdn.net/weixin_33387378/article/details/90721599 1.设置header Content-Type appli ...
- 【JMeter_07】JMeter逻辑控制器__循环控制器<Loop Controller>
循环控制器<Loop Controller> 业务逻辑: 根据所填写的循环次数,对当前节点下的取样器进行响应次数的循环请求,这里可以填写变量.整数.小数.字母.负数.各种符号等: 当填写整 ...
- cb20a_c++_string类型的查找
cb20a_c++_string类型的查找s.find(args) //精确匹配,顺序查找, abc, 连续的包含在abcde,或者fabcde;s.rfind(args) //精确匹配.反向查找s. ...
- Redis命令速查
目录 string list set zset hash 记录下常用的,方便查找 string 内部sds,动态扩容.小于1M加倍扩,大于1M每次扩容1M.最大长度512M. SET name val ...
- TestNG配合ant脚本进行单元测试
上面就是一个简单的SSM框架的整合,数据库来自宜立方商城的e3-mall采用一个简单的spring-mvc和spring以及mybatis的整合 单元测试代码为 TestUserByTestNG.ja ...