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 相关文章推荐
jquery 无限级联菜单案例分享
Mar 26 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
Nov 17 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
检查表单元素的值是否为空的实例代码
Jun 16 Javascript
vue-router单页面路由
Jun 17 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
Vue利用canvas实现移动端手写板的方法
May 03 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
如何利用JavaScript编写一个格斗小游戏
Jan 06 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php中mt_rand()随机数函数用法
2014/11/24 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
Python中文件遍历的两种方法
2014/06/16 Python
Python入门篇之字符串
2014/10/17 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
详解django三种文件下载方式
2018/04/06 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python实现简单的文字识别
2018/11/27 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
python opencv实现证件照换底功能
2019/08/19 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
初中生散播谣言检讨书
2014/11/17 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
2015入党自传书范文
2015/06/26 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
Selenium浏览器自动化如何上传文件
2022/04/06 Python
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技