一、node环境搭建
windows下nvm环境安装
二、node和javascript的区别
ECMAScript
- 1.定义了语法,写javascript和nodejs都必须遵守
- 2.变量定义,循环、判断、函数
- 3.原型和原型链、作用域和闭包、异步
- 4.不能操作DOM,不能监听click事件,不能发送ajax请求
- 5.不能处理http请求,不能操作文件
- 6.即,只有ECMAScript,几乎做不了任何实际的项目
javascript
- 1.使用ECMAScript语法规范,外加Web API,缺一不可
- 2.DOM操作,BOM操作,事件绑定,Ajax等
- 3.两者结合,即可完成浏览器端的任何操作
nodejs
- 1.使用ECMAScript语法规范,外加nodejs API,缺一不可
- 2.处理http,处理文件等
- 3.两者结合,即可完成server端的任何操作
总结
- 1.ECMAScript是语法规范
- 2.nodejs = ECMAScript + nodejs API
三、commonjs
说明:commonjs的模块化规范是nodejs中使用的规范
创建项目
-
1.初始化项目
npm init -y -
2.安装测试案例
lodashnpm i -S lodash -
3.创建对应服务文件
serve.js&工具文件utils.js -
4.编写对应的工具文件和服务引入工具方法
项目代码
- 1.
utils.js代码 创建了两个公共方法addminus
function add(a, b) {
return a + b;
}
function minus(a, b) {
return a - b;
}
// commonjs 导出方法
module.exports = {
add,
minus
}
- 2.
serve.js中引入使用
// commonjs 引入
const { add, minus } = require('./utils')
const _ = require('lodash')
const resultAdd = add(2, 1)
const resultMinus = minus(2, 1)
console.log(resultAdd, resultMinus)
const arr = _.concat([1, 2], 3)
console.log('arr', arr)
- 3.运行代码展示效果
node serve.js
- 4.项目代码目录
四、nodejs中http模块
补充面试题-浏览器http请求概述?
- 1.DNS解析,建立TCP连接,发送http请求
- 2.server接收到http请求,处理,并返回
- 3.客户端接收到返回数据,处理数据,渲染数据
http请求中get
- 1.get请求和querystring
get请求,即客户端要向server端获取数据,如获取首页列表的数据
通过querystring来传递数据,如index.html?content="javascript"&category="1"
浏览器直接访问,就发送get请求
- 2.代码案例
const http = require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {
console.log(req.method)
const url = req.url
// 获取链接拼接的参数
req.query = querystring.parse(url.split('?')[1])
res.end(JSON.stringify(req.query))
})
server.listen(3000, () => {
console.log('server start')
})
- 3.效果展示
http请求中的post
- 1.post请求和postdata
post请求,即客户端要像服务器传递数据,如新增一条新闻纪录
通过post data传递数据
浏览器无法直接模拟,需要手写js,或者使用postman
- 2.代码案例
const http = require('http')
const server = http.createServer((req, res) => {
if(req.method === 'POST') {
// 数据格式
console.log('content-type', req.headers['content-type'])
// 接收数据
let postData = ""
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
console.log(postData)
res.end('hello world')
})
}
})
server.listen(3000, () => {
console.log('server start');
})
- 3.效果展示
nodejs处理路由
www.learnyi.com/
www.learnyi.com/username
www.learnyi.com/username/xx…
说明:代表url唯一的标识
http中的综合案例
- 1.代码案例
const http = require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {
const method = req.method
const url = req.url
const path = url.split('?')[0]
const query = querystring.parse(url.split('?')[1])
// 设置返回格式为JSON
res.setHeader('Content-type', 'application/json')
// 返回的数据
const resData = {
method,
url,
path,
query
}
if (method === 'GET') {
res.end(
JSON.stringify(resData)
)
}
if (method === 'POST') {
let postData = ''
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
resData.postData = postData
res.end(
JSON.stringify(resData)
)
})
}
})
server.listen(3000, () => {
console.log('server start');
})
- 2.效果展示