1、回顾

1.1 node

  • node 服务器
  • url
  • querystring
  • express
  • express 项目生成器
  • ejs

1.2 mongodb

mongod --dbpath d:\data\db

mongo

db.users.insert({})

db.users.insert([{},{}])

db.users.insertOne({})

db.users.insertMany([{},{}])

db.users.deleteOne({})

db.users.deleteMany({})

db.users.updateOne({}, {$set: {}})

db.users.updateMany({}, {$set: {}})

db.users.updateOne({}, {$inc: {}})

db.users.updateMany({}, {$inc: {}})

db.users.find()

db.users.find({})

db.users.find({}, {})

db.users.find({}, {}).sort({})

db.users.find({}, {}).count()

db.users.find({}, {}).skip().limit()

db.users.find({}, {}).toArray()

1.3 封装 mongodb

异步操作 - promise

1.4 express 项目 + mongodb

用户的增删改查

1.5 express 项目 + mongodb + 接口

用户数据的导入

接口的封装

2、图片的上传 1 - 5 - myapp

cnpm i multer -S

Multer 不会处理任何非 multipart/form-data 类型的表单数据。

views/index.ejs

<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="text" name="proname" placeholder="产品名称">
<input type="file" name="avatar" id="">
<input type="submit" value="上传">
</form>

routes/index.js

var multer  = require('multer')
// 将上传的图片存放到 uploads 的文件夹内部
// 如果放进了public ,静态的资源文件
// 如果不放,需要将 uploads 设置为静态的资源文件 --- 多添加代码
var upload = multer({ dest: 'public/uploads/' }) router.post('/upload', upload.single('avatar'), function (req, res, next) {
console.log(req.file) // 包含的文件信息
console.log(req.body) // 文本域的信息
res.send(req.file)
})

查看文件的信息

{ fieldname: 'avatar',
originalname: '11.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'public/uploads/',
filename: '40ff4438d4e6752d209b64808c396f16',
path: 'public\\uploads\\40ff4438d4e6752d209b64808c396f16',
size: 181714 }

图片 上传成功, 但是图片访问不了,没有后缀名

将原图片的后缀名截取下来,和上传了的图片的名称进行拼接即可

nodejs中的模块 fs

fs.rename(oldPath, newPath, () => {})

router.post('/upload', upload.single('avatar'), function (req, res, next) {
console.log(req.file) // 包含的文件信息
console.log(req.body) // 文本域的信息
// res.send(req.file)
let arr = req.file.originalname.split('.')
let type = arr[arr.length - 1] // 后缀名 let oldPath = req.file.destination + req.file.filename
let newPath = req.file.destination + req.file.filename + '.' + type fs.rename(oldPath, newPath, (err) => {
if (err) throw err;
res.send('上传成功')
})
})

将图片保存到数据库

数据库中保存的头像的数据 直接写 /uploads/ + req.file.filename + '.' + type 即可

3、SSR

服务端渲染(Vue) / 前端渲染(ajax) / 后端渲染(ejs)

更快的响应时间,不用等待所有的JS都下载完成,浏览器便能显示比较完整的页面了。

更好的SSR,我们可以将SEO的关键信息直接在后台就渲染成HTML,而保证搜索引擎的爬虫都能爬取到关键数据。

spa single page application

4、seo的优化

搜索引擎优化

  • 为了提升网页在搜索引擎自然搜索结果中的收录数量以及排序位置而做的优化行为。简言之,就是希望百度等搜索引擎能多多我们收录精心制作后的网站,并且在别人访问时网站能排在前面。

白帽SEO和黑帽SEO

5、socket通讯

前后端合作方式

  • 前后端不分离 ejs
  • 前后端分离 ajax
  • 前后端socket通讯

    微信聊天 --- 即时通讯

    点外卖推送外卖订单信息 --- 推送

    软件更新

基于 node 中的 net 原生模块 ---- 网络模块

一般使用可以 使用 第三方模块 socket.io

https://socket.io/

TCP 可靠 / UDP 不可靠 ---- 三次握手

5.1 通讯流程

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

5.2 socket.io

6、vue基础

6.1 开发规范

组件化开发 ---- 组件的首字母大写

bootstrap 按钮

.btn {}
.btn-danger {}
.btn-xs {}
<button class="btn btn-danger btn-xs"></button>

常用js规范 - jslint

var a = 1
var fn = function () {}
if (a === 1) {}
for (var i = 1; i < 10; i++) {}
var b = 2

修改编辑器的默认配置,修改 一个tab键为2个空格 设置 - tabSize

6.2 了解vue

  • vue
  • 构建数据驱动的web应用开发框架
  • Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架
  • Vue 被设计为可以自底向上逐层应用
  • Vue 的核心库只关注视图层
  • 便于与第三方库或既有项目整合
  • Vue 不支持 IE8 及以下版本

6.3 MVX模式

MVC

mvc最早出现在 java 中, 前端中 最早体现 MVC 的是 angularjs

** model view controller **

model 数据源 ----- sql/collection/users.js

view 视 图 ----- views/users.ejs

controller 控制器 -- routes/users.js

优点:耦合性低、重用性高、生命周期成本低、部署快、可维护性高、有利软件工程化管理

缺点:由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。

MVP

** model view presenter(发布层) **

所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

View 与 Model 不发生联系,都通过 Presenter 传递。

View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

MVVM

** model view viewmodel **

可以把ViewModel看作一个藏在View后面的好帮手,它把View需要的数据暴露给它,并且赋予View一定的行为能力。

7、数据的双向绑定

angular --- 依赖注入

vue --- 数据劫持 结合 发布订阅者模式

Vue 最独特的特性之一,是其非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时,视图会进行更新。这使得状态管理非常简单直接,不过理解其工作原理同样重要,这样你可以避开一些常见的问题

https://www.cnblogs.com/libin-1/p/6893712.html

7.1 数据劫持

对象 有 属性, 设置属性, 获取属性的值, 属性会有2个方法 set get

v-model属于vue中表单数输入的一个指令,实质是一个属性,属性的值是一个变量 msg

7.2 数据劫持

var obj = {
name: 'vue学习指南'
}
console.log(obj.name) // vue学习指南 // 目标 ===> 《vue学习指南》 // Object.defineProperty(对象, 属性, {
// set () {},
// get () {}
// }) var str = ''
Object.defineProperty(obj, 'name', {
set (val) {
str = "《"+val+"》"
},
get () {
return str
}
}) console.log(obj.name) // 空值 ---- 直接调用了 get方法 // 目标 ===> 《vue学习指南》 ---- 必须得调用 set 方法
obj.name = 'vue学习指南' // ----- 调用了 set 方法
console.log(obj.name) // 《vue学习指南》

7.3 原理

原理

1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。

2.实现一个订阅者Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。

3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器渲染。

mongodb图片上传 初识vue的更多相关文章

  1. 阿里云 oss 图片上传解决方案 vue (web直传)

    我们通过aliyun-oss-web这个npm去解决 该文章主要介绍如何获取 imgSignature 和 imgPolicy 这两个参数 首先下载 web直传的案例 : http://files.c ...

  2. 后台管理系统之“图片上传” --vue

    图片上传(基于vue) 相信上传图片是所有系统必备的功能吧,工作中的第一个管理系统就在上传图片的功能上卡顿了一整天. 当时用的elementUI组件,但是由于样式和设计图样式差别较大再加上原生相较好理 ...

  3. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...

  4. vue+axios实现移动端图片上传

    在利用vue做一些H5页面时,或多或少会遇到有图片上传的操作,主要是运用html5里面的input[type=file]来实现,传递到后端的数据是以二进制的格式传递,所以上传图片的请求与普通的请求稍微 ...

  5. vue图片上传组件

    前言:很多项目中都需要用到图片上传功能,而其多处使用的要求,为了避免重复造轮子,让我决定花费一些时间去深入了解,最终封装了一个vue的图片上传组件.现将总结再次,希望有帮助. Layout <d ...

  6. 用Vue来实现图片上传多种方式

    没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景.假设我们要做一个后台系统添加商品的页面,有一些商品名称.信息等字段,还有需要上传商品轮播图的需求. 我们就以Vue.Element ...

  7. 百度ueditor vue项目应用 -- 图片上传源码修改

    本文目的有两个,一.废掉单图上传,二.改造多图上传 大家都知道百度ueditor不是针对vue项目开发的,官方文档提供的源码包里有需要后端配置的接口,but到vue项目就不太好办了,网上有些文章也介绍 ...

  8. AntDesign vue学习笔记(七)Form 读写与图片上传

    AntDesign Form使用布局相比传统Jquery有点繁琐 (一)先读写一个简单的input为例 <a-form :form="form" layout="v ...

  9. H5 利用vue实现图片上传功能。

    H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...

  10. vue quill使用&quill 自定义图片上传&自定义mp4 更换标签

    pluins 创建quill 目录 创建文件video.js import { Quill } from 'vue-quill-editor' // 源码中是import直接倒入,这里要用Quill. ...

随机推荐

  1. react+antd 导出excel文件(简单数据&多级表头)

    需求: 在基于react+antd进行开发的页面中,实现导出excel报表的功能 实际场景: 1.简单数据:单层表头+数据 2.复杂数据:多层表头+数据 实现方式: 1.简单数据 简单数据的导出使用了 ...

  2. 从零开始:在树莓派上安装OpenEuler

    树莓派(Raspberry Pi)是一款基于ARM架构的小型电脑,它的便携性和低功耗性能使它成为制作物联网设备或运行嵌入式系统的理想选择.在这篇博客中,我们将介绍如何在树莓派上安装OpenEuler操 ...

  3. CSS 语法-熟悉样式规则

    CSS 规则: CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 样式规则: 以内嵌式样式表为例: (1)所有的css代码都必须书写在<head>标签内部的一对<sty ...

  4. python中的变量定义

    1 变量名:由下划线.字母和数字组成 2 python中变量名的特殊含义: xx:标准的标识符,共有的 _xx:只是在from - import *时是不会被导入的,其他导入方式会被引入 隐藏变量还有 ...

  5. weblogic修改jdk版本方法

    首先,得知道JDk 的安装目录: /usr/local/ 第一种方法:weblogic控制台直接指定JDK 版本: 第二种方法:修改weblogic中默认的JDK版本: weblogic/Oracle ...

  6. windows-git-tagslist

    windows平台使用 Git-bash + vim + Taglist + ctags + cscope 安装Git for win版 安装ctags for win版,目录添加到环境变量 下载 T ...

  7. 记安装MySQL数据库

    记录一次自己动手安装MySQL数据库所踩的坑   MySQL安装包与操作系统匹配 安装包有amd和Intel,32位.64位多种组合需要确认仔细使用者操作系统和CPU型号 例如我使用的是CentOS ...

  8. C/C++ 顺序表的初始化、添加、插入、删除(删除顺序表中指定的所有元素)

    #include <iostream> #include <stdlib.h> #define MAX_SIZE 100 using namespace std; typede ...

  9. 《Unix/Linux系统编程》第十周学习笔记

    <Unix/Linux系统编程>第十周学习笔记 块设备I/O和缓冲区管理 解释块设备I/O的原理和I/O缓冲的优点 I/O缓冲区:内核中的一系列NBUF缓冲区用作缓冲区缓存.每个缓冲区用一 ...

  10. 初学TCP的一些感想

    因为工作原因,想学习一下编程,最近在学习Qt相关的知识,学到了TCP/IP这里,跟着视频做了一个简单的C/S的小例程.例程中没有关于连接状态的判断.经过修改,可是没能达到我要的效果,在百度上进行搜索, ...