mirror of
https://github.com/Estom/notes.git
synced 2026-02-04 11:04:21 +08:00
JavaScript&nodejs
This commit is contained in:
0
JavaScript/NodeJS/10GET&POST.md
Normal file
0
JavaScript/NodeJS/10GET&POST.md
Normal file
0
JavaScript/NodeJS/11Express.md
Normal file
0
JavaScript/NodeJS/11Express.md
Normal file
0
JavaScript/NodeJS/12Express.md
Normal file
0
JavaScript/NodeJS/12Express.md
Normal file
88
JavaScript/NodeJS/1简介.md
Normal file
88
JavaScript/NodeJS/1简介.md
Normal file
@@ -0,0 +1,88 @@
|
||||
## 1 基础
|
||||
|
||||
### 为什么
|
||||
|
||||
JavaScript是运行在浏览器的脚本。为了能让JavaScript在服务器上运行,执行服务器上的业务逻辑,产生了NodeJS。
|
||||
|
||||
### 是什么
|
||||
|
||||
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
|
||||
Node.js是一个事件驱动I/O服务端JavaScript环境。
|
||||
|
||||
### 优势
|
||||
|
||||
* 单线程高并发。通过JS的回调方法,实现了并发。
|
||||
* 自带web服务器模块。
|
||||
|
||||
|
||||
## 2 helloworld
|
||||
|
||||
### server.js
|
||||
```
|
||||
var http = require('http');
|
||||
|
||||
http.createServer(function (request, response) {
|
||||
|
||||
// 发送 HTTP 头部
|
||||
// HTTP 状态值: 200 : OK
|
||||
// 内容类型: text/plain
|
||||
response.writeHead(200, {'Content-Type': 'text/plain'});
|
||||
|
||||
// 发送响应数据 "Hello World"
|
||||
response.end('Hello World\n');
|
||||
}).listen(8888);
|
||||
|
||||
// 终端打印如下信息
|
||||
console.log('Server running at http://127.0.0.1:8888/');
|
||||
```
|
||||
|
||||
```
|
||||
node server.js
|
||||
```
|
||||
|
||||
## 3 NPM
|
||||
nodeJS的包管理器。
|
||||
|
||||
### 安装
|
||||
```
|
||||
$ npm install <Module Name>
|
||||
$ npm uninstall express
|
||||
|
||||
npm install express # 本地安装
|
||||
npm install express -g # 全局安装
|
||||
npm install express@1.3.4 # 指定版本安装
|
||||
```
|
||||
|
||||
### 查看
|
||||
```
|
||||
npm list -g
|
||||
npm ls
|
||||
npm search express
|
||||
npm info jquery 查看jQuery相关的信息
|
||||
```
|
||||
|
||||
### 创建
|
||||
|
||||
```
|
||||
npm init//创建npm模块
|
||||
npm adduser//注册npm
|
||||
npm publish//发布模块
|
||||
```
|
||||
|
||||
### 初始化依赖
|
||||
```
|
||||
npm install
|
||||
```
|
||||
### package.json
|
||||
|
||||
* name - 包名。
|
||||
* version - 包的版本号。
|
||||
* description - 包的描述。
|
||||
* homepage - 包的官网 url 。
|
||||
* author - 包的作者姓名。
|
||||
* contributors - 包的其他贡献者姓名。
|
||||
* dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
|
||||
* repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
|
||||
* main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
|
||||
* keywords - 关键字
|
||||
|
||||
79
JavaScript/NodeJS/2基础.md
Normal file
79
JavaScript/NodeJS/2基础.md
Normal file
@@ -0,0 +1,79 @@
|
||||
## 1交互式解释器
|
||||
|
||||
* 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。
|
||||
* 执行 - 执行输入的数据结构
|
||||
* 打印 - 输出结果
|
||||
* 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
|
||||
|
||||
> nodeJS提供了交互式解释器的功能,可以进行基本的运算和调试。
|
||||
## 2回调函数
|
||||
|
||||
通过回调函数实现了异步编程。
|
||||
|
||||
```
|
||||
var fs = require("fs");
|
||||
|
||||
fs.readFile('input.txt', function (err, data) {
|
||||
if (err) return console.error(err);
|
||||
console.log(data.toString());
|
||||
});
|
||||
|
||||
console.log("程序执行结束!");
|
||||
```
|
||||
|
||||
## 3工程构建
|
||||
> CommonJS是nodejs的标准。nodejs是commonjs的实现。
|
||||
### 包目录构成
|
||||
* package.json 包描述文件
|
||||
* bin 用于存放二进制文件的目录
|
||||
* lib 用于存放JavaScript代码的目录
|
||||
* doc 用于存放文档的目录
|
||||
### 模块说明
|
||||
|
||||
* CommonJS定义,分为系统模块和自定义模块。
|
||||
* 系统模块包括http模块、URL模块、FS模块
|
||||
* 用户自定义模块把公共的功能抽离成一个单独的js文件。需要通过exports输出,require引入。
|
||||
|
||||
```
|
||||
exports.outapi=innerfunction;
|
||||
const selfmodule = require(".../module.js")
|
||||
selfmodule.outapi();
|
||||
```
|
||||
|
||||
```
|
||||
module.exports obj;
|
||||
const seflmodule = reuqire(".../module.js")
|
||||
```
|
||||
|
||||
### node_moudles文件夹说明
|
||||
|
||||
* 工程构建过程中,会自动扫描node_modules文件夹下的子文件夹。
|
||||
* 如果子文件夹下有index.js,nodejs会自动识别,并做为模块入口。
|
||||
* 如果没有index.js,则nodejs无法识别模块入口。
|
||||
* 如果有package.json,nodejs会读取配置文件,并识别配置文件中的入口。包描述文件
|
||||
|
||||
### package.json说明
|
||||
|
||||
* 使用nmp init,初始化一个nodejs模块,生成一个package.json包描述文件。
|
||||
* 使用npm install,会自动下载nodejs模块对应的所有依赖。
|
||||
```
|
||||
{
|
||||
"name": "first",//模块名字
|
||||
"version": "1.0.0",//模块版本号
|
||||
"main": "app.js",//模块入口
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [//模块检索关键词
|
||||
"hello"
|
||||
],
|
||||
"author": "ykl",//模块作者
|
||||
"license": "ISC"//模块开原证书
|
||||
"dependencies":[
|
||||
//^版本号第一位不变,~前两位不变,*版本号都不变
|
||||
]
|
||||
"devDependencies":{
|
||||
//dev工具依赖的包。
|
||||
}
|
||||
}
|
||||
```
|
||||
0
JavaScript/NodeJS/3url模块.md
Normal file
0
JavaScript/NodeJS/3url模块.md
Normal file
0
JavaScript/NodeJS/4supervisor模块.md
Normal file
0
JavaScript/NodeJS/4supervisor模块.md
Normal file
1
JavaScript/NodeJS/5fs模块.md
Normal file
1
JavaScript/NodeJS/5fs模块.md
Normal file
@@ -0,0 +1 @@
|
||||
const fs = re
|
||||
86
JavaScript/NodeJS/6异步回调.md
Normal file
86
JavaScript/NodeJS/6异步回调.md
Normal file
@@ -0,0 +1,86 @@
|
||||
> nodejs最著名的地方,可能就是异步回调了吧。通过异步非阻塞的编程方式,通过回调函数,实现了通信。可以实现宏观上的单线程并发。
|
||||
|
||||
## ES6新特性
|
||||
### let const
|
||||
|
||||
let const 都是块作用域。不是函数的作用域。或是对象作用域。
|
||||
|
||||
### 模板字符串
|
||||
|
||||
```
|
||||
name = 'zhangsan'
|
||||
age = 10
|
||||
console.log(`${name}${age}`)
|
||||
```
|
||||
|
||||
### 箭头函数
|
||||
|
||||
```
|
||||
(err,data)={
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
## 2 异步方法获取数据
|
||||
|
||||
### 不能通过返回值获取异步方法中的数据
|
||||
|
||||
因为return语句执行的时候,内部的运算还没有结束。
|
||||
|
||||
### 通过回调函数获取异步方法中的数据
|
||||
|
||||
```
|
||||
function getData(callback){
|
||||
//异步调用
|
||||
setTimeout(function(){
|
||||
var name = "zhangsan ";
|
||||
callback(name)
|
||||
},1000);
|
||||
}
|
||||
|
||||
getData(function(aaa){
|
||||
console.log(aaa);
|
||||
})
|
||||
```
|
||||
|
||||
### 通过promise获取异步方法中的数据
|
||||
|
||||
promise添加回调方法。p.then调用的时候,复写回调方法。与之前的回调方法很相似。相当于promise代替了之前的getData方法,调用异步方法。
|
||||
```
|
||||
var p = new Promise(function(resolve,reject){
|
||||
//异步调用
|
||||
setTimeout(function(){
|
||||
var name = "zhangsan ";
|
||||
callback(name)
|
||||
},1000);
|
||||
})
|
||||
|
||||
p.then(function(data){
|
||||
console.log(data);
|
||||
})
|
||||
```
|
||||
|
||||
### async、await和promise实现异步非阻塞通信
|
||||
|
||||
* async,想要同步必须返回promise类型
|
||||
* await,等待异步方法执行完成
|
||||
* promise,能够作为异步方法标记,await会等被标记为promise的异步方法执行完毕后,获取返回值。
|
||||
|
||||
```
|
||||
async function test(){
|
||||
return new Promise((resolv,reject)=>{
|
||||
var name = "zhang san "
|
||||
resolve(name);
|
||||
},1000)
|
||||
}
|
||||
|
||||
async function main(){
|
||||
var data = await test();
|
||||
console.log(data);
|
||||
}
|
||||
|
||||
main
|
||||
```
|
||||
|
||||
|
||||
|
||||
5
JavaScript/NodeJS/7流读写.md
Normal file
5
JavaScript/NodeJS/7流读写.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## 1 文件读入流fs.createReadStream
|
||||
|
||||
## 2 文件写入流fs.createWriteStream
|
||||
|
||||
## 3 管道流reStream.pipe(writeStream)
|
||||
6
JavaScript/NodeJS/8静态web服务器.md
Normal file
6
JavaScript/NodeJS/8静态web服务器.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## 1 URL解析
|
||||
|
||||
|
||||
## 2 URL路由
|
||||
|
||||
|
||||
8
JavaScript/NodeJS/9Ejs.md
Normal file
8
JavaScript/NodeJS/9Ejs.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# 文件渲染
|
||||
|
||||
页面渲染主要有两种方式,后端渲染和前端渲染。
|
||||
|
||||
1. 后端渲染主要在服务器将动态数据,加载到HTML页面,然后返回HTML页面。
|
||||
2. 前端渲染主要在客户端(浏览器)上异步请求数据,加载到当前页面,然后返回HTML页面。
|
||||
|
||||
后端渲染速度慢,但逻辑简单。前端渲染速度快,响应速度快。
|
||||
21
JavaScript/NodeJS/demo/app.js
Normal file
21
JavaScript/NodeJS/demo/app.js
Normal file
@@ -0,0 +1,21 @@
|
||||
const http = require('http');
|
||||
const url = require('url');
|
||||
http.createServer(
|
||||
function(request,response){
|
||||
//客户端传递的信息
|
||||
console.log(request.url);
|
||||
//使用URL模块解析url
|
||||
if(request.url!='/favicon.ico'){
|
||||
var userinfo = url.parse(request.url,true).query;
|
||||
console.log(userinfo.name+userinfo.age);
|
||||
}
|
||||
|
||||
//响应客户端的信息
|
||||
response.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});
|
||||
response.write("你好ddddthis is node js\n")
|
||||
|
||||
//结束客户端响应
|
||||
response.end('hello world');
|
||||
}
|
||||
).listen(8081);
|
||||
console.log("server runing")
|
||||
14
JavaScript/NodeJS/demo/package.json
Normal file
14
JavaScript/NodeJS/demo/package.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "first",
|
||||
"version": "1.0.0",
|
||||
"description": "hello",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [
|
||||
"hello"
|
||||
],
|
||||
"author": "ykl",
|
||||
"license": "ISC"
|
||||
}
|
||||
24
JavaScript/NodeJS/demo/test.js
Normal file
24
JavaScript/NodeJS/demo/test.js
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
|
||||
|
||||
async function run(){
|
||||
var a=1;
|
||||
for(var i=0;i<1000000000;i++){
|
||||
a++;
|
||||
}
|
||||
console.log("run finish");
|
||||
return "run return";
|
||||
}
|
||||
|
||||
async function run2(){
|
||||
console.log(await run());
|
||||
console.log("run2 finish")
|
||||
return "run2 return";
|
||||
}
|
||||
|
||||
async function run3(){
|
||||
|
||||
console.log(await run2());
|
||||
return "run3 return";
|
||||
}
|
||||
run3();
|
||||
Reference in New Issue
Block a user