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. 项目实训 DAY 9

    加入页面之间定向的按钮,并改了一个typo

  2. Jmeter一、开源软件的崛起

    一.jmeter自身特点: 1.开源,轻量级,更适合自动化和持续集成. 2.学习难度大. 3.资料少.多英文. 二.性能测试工具选型的原则 1.成本: a.工具成本 b.学习成本 2.通信协议: a. ...

  3. QTreewidget勾选功能

    //connect(ui->treeWidget,&QTreeWidget::itemClicked,this,&PushSelectUser::treeItemChanged) ...

  4. uart 理解

    1: 串口字符串传输和单字节传输的差异体现在字节与字节间是或在停止位后有空闲位的插入(下图红箭头处,没有插入),即 uart_send("123")  和 uart_send('1 ...

  5. 微信小程序 css overflow :hidden 子元素不生效

    原css  .item .right {     width: 70%; }    .item .right .name {     font-size: 32rpx;     font-family ...

  6. maya灯光导入houdini插件开发——技术文档

    如果想了解插件开发流程的话,可以参考我另外一篇文章maya灯光导入houdini插件开发 插件下载地址 接下来我将说明怎么使用这插件(因为之前写过技术文档,所以也懒得再写一份了,直接照搬上来) 1.插 ...

  7. 华为服务器修改ibmc账号密码、配置raid5、安装系统

    修改ibmc账号密码 转载自:https://www.cnblogs.com/mtactor/p/2288V5.html  昵称: mtactor 方法一:采用网线直连管理口 1.使用网线直接连接服务 ...

  8. Linux(CentOS)安装脚本

    此文以CentOS为例,乌班图的是有区别的,请参照https://www.cnblogs.com/takako_mu/p/11725733.html. 安装.Net Core (能访问外网的情况下采用 ...

  9. [C#]接口Interface快速Demo

    参考代码1: using System; namespace InterfaceDemo { /// <summary> /// 定义一个爬树接口 /// </summary> ...

  10. Docker基本概念及命令

    1.Docker三个重要概念:仓库(Repository).镜像(image)和容器(Container) Docker基本用法: docker  命令关键字(COMMAND) 一系列的参数 dock ...