Node.js学习一

一、简介

Nodejs,作为一个js的运行环境
用途:
1、运行在服务区,作为web server (用途最多)
2、运行在本地,作为打包、构建工具。

注意点:
1、Nodejs运行在服务端,而非浏览器坏境
2、服务端开发的思路和套路,与前端完全不一样。
在这里插入图片描述


使用原生代码开发案例项目

  • 实现API和数据存储,使用mysql数据库
  • 从0实现登录,并使用redis存储登录信息
  • 安全,日志记录和日志分析

二、安装和准备

安装
1、npm官网和node官网
2、如果使用多个版本,推荐使用nvm

nodejs和javascript的区别
ECMAScript
定义了语法,不能操作DOM,不能处理http请求,不能操作文件
js:
1、使用了ES的语法规范,加Web API,缺一不可。
2、DOM操作、BOM操作
nodejs
1、使用ES语法规范,外加nodejs API
2、俩者结合,即可完成server端的任何操作。

补充
1、commonjs模块化
使用模块化符合单一值原则和开放封闭原则,把功能相近的拆出去,去别的地方引用。

导入导出

function add(a, b){
    return a + b;
}

function mul(a, b){
    return a * b;
}

module.exports = {
    add,
    mul
};
const { add, mul } = require('./a');

const sum = add(10, 20);
const result = mul(10, 20);
console.log(sum)
console.log(result)

初始化npm环境
npm init -y
引入lodash
const _ = require(‘lodash’);

2、nodejs debugger

server开发和前端开发的区别

1、服务稳定性
(1)server端可能会遭受各种恶意攻击和误操作
(2)单个客户端可以意外挂掉,但是服务端不能
(3)使用PM2做进程守候。
2、考虑CPU和内存(优化、扩展)
(1)客户端占用一个浏览器,内存和CPU都不是问题
(2)server端要承载很多请求,CPU和内存都是稀缺资源
(3)会用stream写日志,使用redis存session
3、日志记录
(1)前端也会参与写日志,但只是日志的发起发,不关心后续
(2)server端要记录日志、存储日志、分析日志、前端不关心
(3)多种日志记录方式,分析日志。
4、安全
(1)server端要随时准备接收各种恶意攻击,前端则少很多,如越权操作,数据库攻击等(写文章提交会攻击数据,如把数据都删了)
(2)登录验证,预防xss攻击和sql注入
5、集群和服务拆分
1、产品发展速度快,流量可能会迅速增加。
2、通过扩展机器和服务拆分来承载流量
3、虽然是单机器开发,但是从设计上支持服务拆分。

三、博客项目介绍

一个项目的全部步骤:
定目标,定需求,定UI设计,定技术方案,开发,联调,测试,上线,结果
1、目标
开发一个博客系统,具有博客的基本功能
只开发server端,不关心前端
2、需求
首页、作者主页、博客详情页
登录页
管理中心,新建页,编辑页
3、技术方案
1、数据如何存储
2、如何与前端对接,即接口设计
4、数据存储
1、博客
2、用户
在这里插入图片描述
5、存储用户
在这里插入图片描述
6、接口设计
在这里插入图片描述
7、关于登录
1、业界有统一的解决方案,一般不用再重新设计
2、实现起来比较复杂

四、开发博客项目之接口

4-1 http概述
开发接口(不用任何框架)
1、nodejs处理http请求
2、搭建开发环境
3、开发接口(暂不链接数据库,暂不考虑登录)

DNS解析,建立TCP连接,发送http请求
server端接收http请求,处理,并返回
客户端接收到返回数据,处理数据(如渲染页面,执行js)

80端口是http的默认端口,443是https的默认端口。
4-2 nodejs处理http请求
1、get请求和url参数(querystring)
2、post请求和postdata
3、路由

const http = require('http')//获取原生的http模块

const server = http.createServer((req, res) => {
    res.writeHead(200, {'content-type':'text/html'})
    res.end(
        '<h1>hello world</h1>'//结束了返回了什么
    )
})//返回一个server对象

server.listen(3000, () => {
    console.log('listening on 3000 port')
})//监听本地端口号

处理get请求
1、get请求,即客户端要向server端获取数据,如查询博客列表
2、通过querystring来传递数据,如a.html?a=100&b=200
3、浏览器之间访问,发送get请求

nodejs处理get请求
/favicon.ico 浏览器自带的请求,表示唯一标识的图标

const http = require('http')
const querystring = require('querystring')//获取原生的querystring模块

const server = http.createServer((req, res) => {
    console.log('method:', req.method)//GET
    const url = req.url//获取请求的完整url
    console.log('url:', url)
    req.query = querystring.parse(url.split('?')[1])//将参数解析为JSON对象
    console.log('query:', req.query)
    res.end(
        JSON.stringify(req.query)//将querystring返回
    )
})

server.listen(8000)
console.log('OK')

4-3 nodejs处理post请求
1、客户端要向服务端发送(传递数据)如新建博客
通过post data传递数据
浏览器无法直接模拟,需要手写js,或者使用postman

const http = require('http')
const server = http.createServer((req,res) => {
    if(req.method === 'POST'){
        //req数据格式
        console.log('req content-type', req.headers['content-type'])//请求头中的请求类型
        //接收数据
        let postData = ''
        req.on('data', chunk => {
            postData +=chunk.toString()//chunk二进制格式的数据,变成字符串的格式
        })
        req.on('end', () => {
            console.log('postData:', postData)
            res.end('hello world!')
        })
    }
})

server.listen(8000)
console.log('OK')

2、nodejs处理路由
代表的是资源url唯一的标识

4-4处理http请求的综合实例

4.5搭建开发环境
1、从0搭建
2、使用nodemon检测文件变化,自动重启node

cnpm--save-dev nodemon

3、使用cross-env设置环境变量

 cnpm--save-dev cross-env

4、启动项目

 cnpm run dev

4-6开发接口

1、初始化路由
2、返回假数据:将路由与数据处理分离

4-7开发路由(博客列表路由)

4-8开发路由,博客详情路由

4-9开发路由,处理POSTData

在app.js中用promise异步处理post data,req body即为post data(向后端传递的数据)

4-10新建和更新博客

新建:
1、在controller里面引入对象(blogData),对象包括文章标题,内容,return 出一个id,表示插入数据表id,输出此函数
2、在router中引入上述,把req.body作为参数传到函数中

更新:
更新一篇博客需要id,发送的内容
1、在controller中写入数据,return出正确与否
2、在router中引入上述

4-11删除博客路由和登录路由

删除:
只需要前端提供的一个id就可以了
1、在controller中建一个方法
2、在router中引入,传入id
登录:
需要验证用户名和密码
1、在controller中假定用户名和密码
2、在router中传入username和password

路由总结:
为何将router和controller分开?
router中表示来了路由,如何
controller中只管数据,来了参数就处理数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值