vue引入ueditor及node后台配置详解


Posted in Javascript onJanuary 03, 2018

最近公司的某个客户要用上我们公司的产品,他的后台管理里的富文本编辑器要求有点多,开始打算用Quill,但是发现Quill根本满足不了他的需求。在调研了市面上的富文本编辑器后,最后似乎只剩了百度的ueditor。虽然很丑~~~,不过没关系,政府网站和这种效果更搭:-D 我是不是说了什么(逃

vue引入ueditor

步骤

  1. 百度ueditor下载,随便哪个版本就好(本文章以php版为例),不需要特别全面功能的可以考虑下UM喽
  2. 将对应的文件夹放到static中
  3. 修改前端vue部分引用的ueditor.confg.js,设置路径window.UEDITOR_HOME_URL = "/static/utf8-php/"
window.UEDITOR_HOME_URL = "/static/utf8-php/"

 var URL = window.UEDITOR_HOME_URL || getUEBasePath();
 /**
  * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。
  */
 window.UEDITOR_CONFIG = {

  //为编辑器实例添加一个路径,这个不能被注释
  UEDITOR_HOME_URL: URL
  // 服务器统一请求接口路径
  , serverUrl: "http://localhost:3000/ueditor/ue"
 // ............ 下面忽略................

编写vue文件,我已经把static配置到webpack的路径里了,自己可以相应更改,ueditor中的各项方法可以在自己下载的百度ueditor包的index.html中找。

<template>
 <div class="hello">
 <script id="editor" type="text/plain"></script>
 <button @click="show">你敢点一下吗?</button>
 </div>
</template>

<script>
export default {
 name: 'HelloWorld',
 data () {
 return {
  editor: null
 }
 },
 methods: {
 show () {
  console.log(this.editor.getContent())
 }
 },
 mounted () {
 require('static/utf8-php/ueditor.config.js')
 require('static/utf8-php/ueditor.all.min.js')
 require('static/utf8-php/lang/zh-cn/zh-cn.js')
 require('static/utf8-php/ueditor.parse.min.js')
 this.editor = window.UE.getEditor('editor')
 },
 destroyed () {
 this.editor.destroy()
 }
}
</script>

注意事项

  1. 在步骤3中的路径一定要有最后一个"/"
  2. 步骤3中的serverUrl写成对应的服务端地址

node后端处理

express 实现

网上有人已经实现了express版的,使用express的有福了。不过我直接用他的是不能直接用的,在浏览器中报": unexcepected ",我将他的代码改了一下,不让它在返回配置是重定向,而是直接返回一个jsonp,jsonp内容设置为百度的ueditor包中的php文件下的config.json,记得用正则表达式或者直接用手把注释去掉,json是没有注释的。
这时你可能发现不报错了,但是图片上传会错误,报404。其实图片已经上传成功了,只是没有正确的加载,因为返回的路径只是路径,不是完整的url,就会请求到前端服务域下。(例如"http://localhost:8080/**")。此时修改config.json中"imageUrlPrefix": "http://localhost:3000",就可以将图片路径补充完整。跨域问题自己解决哈-----

  1. res.jsonp(config.json)
  2. 给config.json的imageUrlPrefix加后端域

koa实现

这时个比较精巧的库,而且将在v3中去掉了generator写法,generator现在已经渐渐不被支持,所以使用async写法吧。我主要用了await-busboy这个库,实现文件处理。

实现判断

const ActionType = ctx.query.action
// 当ActionType为config时返回与express中一样的json
// 当为uploadimage或uploadfile时处理
处理上传
const parse = require('await-busboy')
const parts = parse(ctx)
 let part,
  stream,
  tmp_name,
  file_path,
  filename
 while ((part = await parts)) {
  if (part.length) {
   // 此处解析到form的fields
   console.log({ key: part[0], value: part[1] })
  } else {
  // 此处解析到文件并以可读流形式返回,通过nodejs官方API存储
  if(ActionType === 'uploadimage' && img_type.indexOf(path.extname(part.filename)) >= 0 ){
   filename = 'pic_'+ (new Date()).getTime() + '_' + part.filename
   file_path = path.join(img_path, filename)
  } else if (ActionType === 'uploadfile'){
   filename = 'file_'+(new Date()).getTime()+'_'+part.filename
   file_path = path.join(files_path, filename)
  }
  stream = fs.createWriteStream(path.join(static_path,file_path))
  part.pipe(stream)
  tmp_name = part.filename
 }
 // 返回json要引用koa-jsonp哦~~

到这大概可以了,自己去试一下吧~~希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
JavaScript门面模式详解
Oct 19 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
Vue动态获取width的方法
Aug 22 Javascript
解决vue点击控制单个样式的问题
Sep 05 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
Node.js搭建小程序后台服务
Jan 03 #Javascript
基于js文件加载优化(详解)
Jan 03 #Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 #jQuery
js 取消页面可以选中文字的功能方法
Jan 02 #Javascript
js阻止默认右键的下拉菜单方法
Jan 02 #Javascript
webpack实用小功能介绍
Jan 02 #Javascript
js最简单的双向绑定实例讲解
Jan 02 #Javascript
You might like
德生PL660的电路分析和打磨
2021/03/02 无线电
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
js创建对象的方式总结
2015/01/10 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python 的 Socket 编程
2015/03/24 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python写的一个简单监控系统
2015/06/19 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
pandas按条件筛选数据的实现
2021/02/20 Python
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
2014年教师培训的自我评价
2014/01/03 职场文书
大学生先进事迹材料
2014/02/16 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
特岗教师个人总结
2015/02/10 职场文书
原告离婚代理词
2015/05/23 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书