(node篇)1.nodejs学习-持续更新!

278 阅读2分钟

一、node环境搭建

windows下nvm环境安装

juejin.cn/post/688821…

二、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.安装测试案例lodash npm i -S lodash

  • 3.创建对应服务文件serve.js&工具文件utils.js

  • 4.编写对应的工具文件和服务引入工具方法

项目代码

  • 1.utils.js代码 创建了两个公共方法add minus
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

image.png

  • 4.项目代码目录

image.png

四、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.效果展示

image.png

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.效果展示

image.png

image.png

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.效果展示

image.png

image.png