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 ...
随机推荐
- 用mvc框架查询数据库数据
介绍下mvc框架,mvc框架一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑. 首先我们 ...
- jsp页面用DBHelper实现简单的登陆验证
首先我们需要写一个简单的登陆页面login.jsp,然后用from表单提交给index.jsp页面.在index.jsp页面通过DBHelper连接数据库判断账号和密码,如果密码正确则显示登陆成功. ...
- 2020最新IDEA插件大集合,一款能帮助你写代码的工具是多么重要
摘要 12款为用户精心打造的Idea插件,含盖前后端,另把使用小技巧分享给大家,提高大家的码率,希望对你们有帮助! Lombok Lombok为Java项目提供了非常有趣的附加功能,使用它的注解可以有 ...
- 【翻译】.NET 5 Preview5发布
今天,发布了.NET 5.0 Preview5.主要对它进行了一小部分新功能和性能的改进..NET 5.0 Preview 4包含了一些计划和.NET 5.0要交付的内容. 现在,大多数的功能都已经包 ...
- Dedecms中{dede:type}标签支持调用父级栏目名称
需求: 我们用{dede:type}标签调用栏目相关内容时,同时需要调用该栏目的父级栏目的名称. {dede:type}标签的代码做了一下开发,支持这个调用了. 开发方法: 1.打开include/t ...
- 第一个SpringMVC程序 (注解版)
1.新建一个web项目 2.导入相关jar包 3.编写web.xml , 注册DispatcherServlet <?xml version="1.0" encoding=& ...
- @codeforces - 668E@ Little Artem and 2-SAT
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定两个 2-sat 问题,询问两个问题的解集是否相同. 如果不 ...
- 测试必备工具之最强抓包神器 Charles,你会了么?
前言 作为软件测试工程师,大家在工作中肯定经常会用到各种抓包工具来辅助测试,比如浏览器自带的抓包工具-F12,方便又快捷:比如时下特别流行的Fiddler工具,使用各种web和APP测试的各种场景 ...
- LNMP 环境更换Nginx 服务器为Tengine
本人之前所使用 LNMP 环境一直是原生的Nginx服务器,最近几天看了好多大网站使用 淘宝团队基于Nginx开发的 Tengine 决定给自己的虚拟机也装个玩玩. 关于Tengine的介绍就不多说了 ...
- Java并发编程-Java内存模型
JVM内存结构与Java内存模型经常会混淆在一起,本文将对Java内存模型进行详细说明,并解释Java内存模型在线程通信方面起到的作用. 我们常说的JVM内存模式指的是JVM的内存分区:而Java内存 ...