Nodejs-express+vue-cli+wangeditor俺叭,在項目中快速集成富文本編輯器

本文分享給需要在node服務(wù)端的項目中使用富文本編輯器的小白,站在金字塔頂端的大佬輕噴
概要:
服務(wù)端使用的express框架
前端使用vue-cli搭建
開發(fā)后臺編輯功能需求一個富文本編輯器泰偿,首先想到的當然是爛大街的“百度ueditor”熄守,然而不幸的的是ueditor木有nodejs版本。網(wǎng)上找了修改配置等N種方法耗跛,由于作者“PJ”用智商換取了顏值裕照,所以都沒有成功。于是放棄另求其他編輯器调塌,找到了一個輕量級的編輯器——wangeditor晋南,風(fēng)格簡約清新,使用方便羔砾。

下面我們開始集成步驟:
一负间、前端配置:
這里默認你已經(jīng)使用vue-cli搭建好了項目
1、安裝編輯器依賴:
進入自己的前臺項目姜凄,打開cmd控制臺政溃,輸入 :

npm install wangeditor --save

2、在組件中使用wangeditor

<template>
    <div id="myWangEditor" ref="myWangEditor">
        <p>歡迎使用 <b>wangEditor</b> 富文本編輯器</p>
    </div>
</template>

<script>
    import wangEditor from 'wangeditor';  //引入剛npm安裝的wangeditor插件
    
    export default({
        name:"MyWangEditor",
        data(){
            return {
                editorContent : "" //內(nèi)容
            }
        },
        created(){
            
        },
        mounted(){
            var _this = this;
            var editor = new wangEditor(this.$refs.myWangEditor); //實例化wangeditor

              editor.customConfig = {
                            onchange : (html) =>{this.editorContent = html;} ,
                            uploadImgMaxSize : 3 * 1024 * 1024 ,  // 將圖片大小限制為 3M
                            uploadImgMaxLength : 1 , // 限制一次最多上傳 1 張圖片
                            uploadFileName : 'myFileName' , //設(shè)置上傳圖片文件的時候态秧,后臺接受的文件名董虱,files.myFileName;
                            withCredentials : true , //跨域上傳中如果需要傳遞 cookie 需設(shè)置 withCredentials
                            uploadImgTimeout : 3000 , //自定義 timeout 時間,這里是設(shè)置的3秒
                            uploadImgServer : 'http://10.55.4.74:3000/ueditor/wangeditor/upload' , //上傳到后臺的接口
                    };
                   /*editor.customConfig.uploadImgParams = {//如果要自定義傳一些參數(shù)申鱼,就在這里愤诱;
                        // 如果版本 <=v3.1.0 ,屬性值會自動進行 encode 捐友,此處無需 encode
                        // 如果版本 >=v3.1.1 转锈,屬性值不會自動 encode ,如有需要自己手動 encode
                        img_name:_this.img_name,
                        token: 'abcdef12345'
                  };*/
            this.toListenUp(editor);//監(jiān)聽上傳的各個階段
            editor.create();
        },
        methods:{
            toListenUp:function(editor){ //監(jiān)聽上傳圖片的幾個階段楚殿,和做相應(yīng)的處理
                var _this = this;
                editor.customConfig.uploadImgHooks = {
                    before: function (xhr, editor, files) {
                        // 圖片上傳之前觸發(fā)
                        // xhr 是 XMLHttpRequst 對象,editor 是編輯器對象竿痰,files 是選擇的圖片文件
                        
                        // 如果返回的結(jié)果是 {prevent: true, msg: 'xxxx'} 則表示用戶放棄上傳
                        // return {
                        //     prevent: true,
                        //     msg: '放棄上傳'
                        // }
                    },
                    success: function (xhr, editor, result) {
                        // 圖片上傳并返回結(jié)果脆粥,圖片插入成功之后觸發(fā)
                        // xhr 是 XMLHttpRequst 對象,editor 是編輯器對象影涉,result 是服務(wù)器端返回的結(jié)果
                    },
                    fail: function (xhr, editor, result) {
                        // 圖片上傳并返回結(jié)果变隔,但圖片插入錯誤時觸發(fā)
                        // xhr 是 XMLHttpRequst 對象,editor 是編輯器對象蟹倾,result 是服務(wù)器端返回的結(jié)果
                    },
                    error: function (xhr, editor) {
                        // 圖片上傳出錯時觸發(fā)
                        // xhr 是 XMLHttpRequst 對象匣缘,editor 是編輯器對象
                    },
                    timeout: function (xhr, editor) {
                        // 圖片上傳超時時觸發(fā)
                        // xhr 是 XMLHttpRequst 對象猖闪,editor 是編輯器對象
                    },
                
                    // 如果服務(wù)器端返回的不是 {errno:0, data: [...]} 這種格式,可使用該配置
                    // (但是肌厨,服務(wù)器端返回的必須是一個 JSON 格式字符串E嗷拧!柑爸!否則會報錯)
                    customInsert: function (insertImg, result, editor) {
                        // 圖片上傳并返回結(jié)果吵护,自定義插入圖片的事件(而不是編輯器自動插入圖片!1眵ⅰO诙)
                        // insertImg 是插入圖片的函數(shù),editor 是編輯器對象譬圣,result 是服務(wù)器端返回的結(jié)果// 舉例:假如上傳圖片成功后瓮恭,服務(wù)器端返回的是 {url:'....'} 這種格式,即可這樣插入圖片:
                        var url = result.data[0]  厘熟; //獲取后臺返回的圖片路徑
                        insertImg(url) 屯蹦;//把圖片路徑展示在編輯器里面
                        // result 必須是一個 JSON 格式字符串!6⑵颇玷!否則報錯
                    }
                    }
                }
            }
        
    })
</script>
    
<style>
    
</style>

二、服務(wù)端配置
這里默認你已經(jīng)使用express搭建了服務(wù)端
1就缆、進入后臺項目文件夾 routes 新建路由js文件 ueditor.js , 建立一個后臺接受圖片上傳的接口帖渠,具體代碼如下:

var express = require('express');
var router = express.Router();
var formidable = require('formidable');  //上傳圖片處理的插件
var fs = require("fs");  //文件模塊

//wangeditor上傳圖片的地址
router.post("/wangeditor/upload",function(req,res,next){
    var form = new formidable.IncomingForm();
    //設(shè)置文件上傳存放地址(需要先把這個文件夾,在項目中建好)
    form.uploadDir = "./dist/uploads";
    //執(zhí)行里面的回調(diào)函數(shù)的時候竭宰,表單已經(jīng)全部接收完畢了空郊。
    form.parse(req, function(err, fields, files) {
            var oldpath = files.myFileName.path; //myFileName就是我們剛在前臺模板里面配置的后臺接受的名稱;
            var extname = files.myFileName.name; //因為formidable這個時候存在我們剛路徑上的切揭,只是一個path狞甚,還沒有具體的擴展名,如:2.png這樣的
            //新的路徑由組成:原父路徑 + 拓展名
            var newpath = "./dist/uploads/" + extname;
            //改名
            fs.rename(oldpath, newpath, function(err) { //把之前存的圖片換成真的圖片的完整路徑
                if(err) {
                    res.send({errno:1,data:[]});
                };
                var mypath = newpath.replace("./dist","http://localhost:3000"); //把靜態(tài)資源路徑替換為網(wǎng)絡(luò)資源路徑
                res.send({errno:0,data:[mypath]}) //返回圖片路徑廓旬,讓前端展示
            });
    });
})



module.exports = router;   //暴露接口

express默認的靜態(tài)資源路徑是public哼审,因為我把vue-cli里build出來的dist文件夾直接復(fù)制進去了,所以進行了修改孕豹。具體路徑配置需要各位根據(jù)自己express設(shè)置的靜態(tài)資源路徑修改涩盾。

2、在主app.js中励背,設(shè)置路由春霍,讓前臺訪問到,如下:

var ueditor = require('./routes/ueditor');

app.use("/ueditor",ueditor)叶眉;

三址儒、最后生成效果如下圖:


圖片借的別人的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芹枷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子莲趣,更是在濱河造成了極大的恐慌鸳慈,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妖爷,死亡現(xiàn)場離奇詭異蝶涩,居然都是意外死亡,警方通過查閱死者的電腦和手機絮识,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門绿聘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人次舌,你說我怎么就攤上這事熄攘。” “怎么了彼念?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵邪码,是天一觀的道長撒轮。 經(jīng)常有香客問我冬竟,道長搏讶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任吩案,我火速辦了婚禮棚赔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徘郭。我一直安慰自己靠益,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布残揉。 她就那樣靜靜地躺著胧后,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抱环。 梳的紋絲不亂的頭發(fā)上壳快,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音镇草,去河邊找鬼眶痰。 笑死,一個胖子當著我的面吹牛陶夜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裆站,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼条辟,長吁一口氣:“原來是場噩夢啊……” “哼黔夭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起羽嫡,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤本姥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杭棵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婚惫,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年魂爪,在試婚紗的時候發(fā)現(xiàn)自己被綠了先舷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡滓侍,死狀恐怖蒋川,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撩笆,我是刑警寧澤捺球,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站夕冲,受9級特大地震影響氮兵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歹鱼,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一泣栈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧醉冤,春花似錦秩霍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至螺捐,卻和暖如春颠悬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背定血。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工赔癌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澜沟。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓灾票,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茫虽。 傳聞我的和親對象是個殘疾皇子刊苍,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容