NodeJs学习

基础概念

初识

  1. nodejs是什么? 运行环境,支持在服务端运行js,使用的Google V8引擎
  2. 除了不能使用DOM和BOM 其他js的用法都能上
  3. 跟js一样属于单线程,但js只能跟浏览器打交道,NodeJs使得js还能能跟操作系统打交道,对磁盘读写
  4. 用java做后端不好吗? 对开发人员而言nodejs开发更快,你去实践一下就知道真香了,nodejs适合运用在高并发、I/O密集、少量业务逻辑的场景,对于比较大型的系统还是会优先选Java,多线程处理CPU重的系统还是挺6的,emmm

模块化

nodeJs 会自动给每个js文件都用
function(exports,require,module,__filename,__dirname)包裹
函数的返回值为module.exports 跟exports 指向一个地址,module.exports的为准
require(‘xxx’) 引入外部模块会返回一个对象,并执行模块自身内容(自调用函数)

核心模块

fs http path os url等等

  1. fs文件操作模块
fs.mkdir('/xxx',err=>{})
f.writeFile('/xxx','hello',err=>{})
f.appendFile('/xxx','+hello'err=>{})
f.readFile('/xxx','utf8',(err,data)=>{})
// 大文件可创建stream流
const resource =fs.createReadStream('/xxx')
const dist=fs.createWriteStream('/xxx')
resource.pipe(dist)
  1. http模块
http.createServer((req,res)=>{}).listen('3000')
  1. Buffer缓冲区
    起源:起初js语言没有二进制数据类型,在处理文件流(二进制数据的流动)时必须要使用到二进制数据,因此nodeJs搞了个Buffer类,每当要处理I/O操作移动数据时就可能用到这个Buffer。
    用于处理二进制数据流。
    类似数组,呃,本质跟数组没大关系,只不过它存放的是二进制数据(用16进制显示),一个元素占一个字节
xxx=Buffer.from() // 创建一个Buffer对象
xxx.toString('编码格式') //二进制转字符
Buffer.alloc(size) // 创建一个指定大小的Buffer

PS:写一个项目下来基本上没用到,因为很多小框架已经把它封装好了
4. path

不用引入path,通用路径: __dirname:当前所在文件夹的目录路径;__filename:当前文件目录路径 

在文件操作路径上使用相对路径不可靠,因为那是相对于执行node命令所处的路径而言!!

补充

服务端渲染:可以使用art-template等插件作为模版引擎(处理文件特殊字符标志的数据替换),在初次请求页面时就在服务端把数据都填充好。
缺点:页面显示慢。
客户端渲染:服务端仅仅把页面传过来,数据还得另作请求。
缺点:不利于SEO,异步渲染SEO查不到。
项目可采用两种渲染方式相结合,像商品列表页采用服务端渲染,有利于用户搜索,评论列表用客户端渲染,速度更快。

实战

工具

  1. express :更方便操作http模块
中间件
app.get('/home',(req,res,next)=>{next()})
app.get('/home',(req,res,next)=>{res.send('hhhh')})
中间件就是一个函数 ,对请求处理做了一些特定封装,然后把处理结果返回给下一个中间件使用(next),直到遇到没有next的中间件
针对一个请求可以设置多个中间件,进行多次处理(重上往下匹配)

app.use((req,res,next)=>{}) // app.use匹配所有请求方式,直接传入请求函数,表示对所有请求统一处理
app.use(‘/home’,(req,res,next)=>{})针对特定路径处理
app.use('/home',authMiddleware(),(req,res)=>()) 封装中间件后这样子写也可以
app.use((err,req,res,next)=>{}) 接收四个参数时统一对抛出的错误进行处理,err来自上一个中间件next(err)
  1. mongoDB数据库
安装(一些工具模块还得再去官网下载复制到mongdb bin 下)
/usr/local cd /usr/local  
// 下载 
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz  
// 解压 
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz  
// 重命名为 mongodb 目录 
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb
Mac bash配置
vim ~/.bash_profile
export PATH=/Users/tao/go/bin:$PATH  //添加
source ~/.bash_profile
mongod 启动
mongo  进入mongo操作(最好下个视图软件mongobooster)
show dbs 查看数据库列表
use '数据库名称'  切换到指定数据库
db  查看当前连接到数据库
db.student.find() 查表内容
show collections 查所有表

mac上配置后重新打开终端无法提示找不到命令,如果你在Mac上使用的是zsh等shell工具,需要再做如下配置:

vim ~/.zshrc
// 添加
if [ -f ~/.bash_profile ]; then
   source ~/.bash_profile
fi
// 执行
source ~/.zshrc
  1. 服务端实用性包

npm i mongoose 代码中更方便操作mongodb
npm i nodemon -g 热更新项目,使用nodemon xxx.js
服务端想使用session 可安装npm i express-session
npm i multer 专门处理上传文件中间件
multer-aliyun-oss OSS上传图片插件
bctypt 密码加密
jsonwebtoken 生成token

  1. 客户端实用性包

npm i less less-loader@7.3.0 -D (用webpack4要指定版本号)
使用:
import VueAwesomeSwiper from ‘vue-awesome-swiper’
import ‘swiper/css/swiper.css’
Vue.use(VueAwesomeSwiper)

vue add element
vue add axios
vue add router
npm i vue2-editor 富文本编辑器
npm i swiper@5.4.5  vue-awesome-swiper (记得加版本不然报错)
npm i dayjs 时间日期库更轻量

步骤

服务端:

npm i -y 初始化项目
新建index.js 做入口
在package.json 自定义脚本:serve: nodemon index.js
引入express创建web服务 npm run serve 启动
新建文件db.js 使用mongoose统一连接数据库
新建文件夹models,放表结构schema
封装路由const router=express.Router({mergeParams:true}) router.get…exports
在入口一一引入,注意顺序

前端:

vue create xxx
配置路由
全局公共样式配置

发布和部署

  1. 生产环境配置
    .env.development 配置开发
    .env.production 配置生产
    执行npm run build 编译目标文件指向服务端某个文件
    然后在服务器入口index.js配置静态资源开放

    app.use('/public',express.static(__dirname+'/public')) // public也要公开
    app.use('/admin',express.static(__dirname+'/public/admin'))
    app.use('/',express.static(__dirname+'/public/web'))
    
  2. 买:服务器+域名(去实名)、配置域名解析、服务器安全组添加80端口、去备案域名(选xg的可不用备案)

  3. 装:服务器使用命令行安装Ngnix 、Node(配淘宝镜像)、Git、MongoDb、pm2(后台启动类似nodemon)

    npm install pm2@latest -g
    pm2 start index.js  //运行
    
    • 配:git
    ssh-keygen
    一路回车
    cat xxxx.pub
    复制粘贴到git的ssh中
    
    • 配:nginx配置
    在 /etc/nginx/conf.d 下面创建一个配置文件叫 default.conf,内容如下:
    server {
      listen 80;
      location / {
          proxy_pass http://xx.xx.xx.xx:xxxx; 
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection 'upgrade';
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_cache_bypass $http_upgrade;
      }
    }
    删除掉/etc/nginx/nginx.conf里面定义的 server  
    
    systemctl start nginx 启动
    改了配置需要systemctl reload nginx
    如果80端口起不来可试试:
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd  --reload
    

    npm i -g n 可更新node —>n latest

    • mongodb 本地数据库迁移:
    mongodump -d '数据库'
    将生成的文件拷贝至服务器中 
    在服务端执行mongorestore 即可
    

4.服务器git拉代码 启动服务端即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值