亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js實現(xiàn)復制文本到剪切板的功能

 更新時間:2017年01月23日 10:12:05   作者:十年燈  
這篇文章主要給大家介紹了node.js實現(xiàn)復制文本到剪切板的功能,文中介紹的非常詳細,并給出示例代碼,相信對大家具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。

前言

最近在工作中遇到一種需求:我需要請求后端數(shù)據(jù),但請求數(shù)據(jù)前需要登陸,獲得一個token。登陸方式是向一個json地址post數(shù)據(jù)即可。之前我的做法是,用chrome插件postman來實現(xiàn)登陸動作。但后來無意中發(fā)現(xiàn),postman內(nèi)存占用超高!即使我并沒有使用它。這讓我很不爽。

后來一想,實現(xiàn)這么簡單的一個動作,用這么重的插件,對于我這樣一個會nodejs的前端程序員是不是太Low了?簡直不好意思對人講自己會nodejs!

于是我就花了點時間寫了個簡單的腳本。本文記錄一下開發(fā)過程。

實現(xiàn)思路

思路大概是,用nodejs腳本發(fā)請求,并將返回結(jié)果中的token自動復制到剪切板,于是我只用在調(diào)試代碼中,ctrl+v就行了。

思路很簡單,但實現(xiàn)起來居然坑很多。

nodejs沒有直接復制到剪切板的API!

非常簡單的功能,但nodejs沒有提供。但不要絕望,因為nodejs可以調(diào)用系統(tǒng)命令,而系統(tǒng)命令中有不少可以操作剪切板的命令。

我google之后,由于系統(tǒng)是windows,所以考慮使用windows cmd命令中的clip,來實現(xiàn)復制到剪切板的功能。

nodejs調(diào)用系統(tǒng)命令(cmd)

var exec = require(‘child_process').exec,然后你就可以像普通函數(shù)一樣調(diào)用它,如:exec(‘echo 111');

clip命令的坑

在cmd里,實現(xiàn)復制文本到剪切板最簡單的命令是:echo 123456 | clip。本來,在nodejs中拼出這樣一句語句,交給child_process.exec執(zhí)行就可以了。但這個命令的執(zhí)行結(jié)果,有個我無法忍受的bug:復制出來的文本,最后有個換行符(echo造成的)!我不可能在ctrl+v后,還要按幾下刪除鍵才能ctrl+s??!

當時讓我很糾結(jié),我很奇怪微軟連這么簡單的命令都沒作好。但無奈事情還是要做的,只有繼續(xù)尋找解決辦法。于是有了下面這個不經(jīng)過echo的方式:

<nul (set/p z=123456) | clip

這種方法十分別扭,注意最開頭那個<,不是我打錯了字!大致思路是,通過set命令設置一個變量名為p(此名隨意改)的變量,值為12346,并馬上調(diào)用clip復制此變量的值。 但這種方法復制出來的值還是有bug:末尾多了一個空格!雖然你代碼里并沒有空格,但復制出來就是有!去不掉! 當時我簡直要罵娘了!沒有換行就有空格,能不能靠點譜!

麻煩而穩(wěn)妥的最終實現(xiàn)

最后我嘗試了一種思路:得到要復制的文本后,生成一個臨時文件,將文本放進去;生成一個批處理文件,在批處理文件中調(diào)用clip命令,復制那個文本文件的內(nèi)容;最后刪除臨時文本文件與批處理文件。

當時我想的是,要是這種方式還不能完美,我就棄nodejs投python!

所幸復制出來的文本,終于正常了,沒有換行符,沒有空格。

代碼如下,為了方便發(fā)請求使用了request包:

'use strict';

var request = require('request');
var fs = require('fs');

var exec = require('child_process').exec;
var execFile = require('child_process').execFile;
request({
 method: 'POST',
 uri:'http://web.test1.com/mgw/login.json',
 headers: {
  'Content-Type':'application/json'
 },
 body: JSON.stringify({
  "loginname":"lixing1@0101005",
  "pw":"aebc3ebee2f0c8b08b43d26c2b0055b19caeaf4a",
  "res":"web"
 })
 }, function (err, result, body) {
 console.log(body);
 body = JSON.parse(body);
 copyToClipboard(body.token, function (text, stdout) {
  console.log('token copy successed!', text, stdout);
 })
});


// 簡單的復制文本到剪切板的函數(shù),參數(shù)依次是文本,成功回調(diào)
var copyToClipboard = function(text, func) {
 // 這種復制出來后最后有個換行符,不合要求
 'echo ' + text + ' | clip';
 // 這種復制出來最后有個空格,還將就
 '<nul (set/p z=' + text + ') | clip';

 // 這種方式最完美,但最麻煩
 // 會生成一個批處理文件,一個文本文件,以批處理文件復制文件文件的內(nèi)容,后又需要刪除兩個文件。
 var temp = 'txt_' + Date.now() + '.txt';

 var str = `@echo off
<nul (set/p z=${text}) > ${temp} 
clip < ${temp} 
del ${temp}
`;
// 這句加入批處理,會導致報錯,雖然能執(zhí)行(復制)成功。原因應該是,del批處理文件自身的時候,nodejs還在使用他
// 'del "%~f0"';
 var cmdFile = 'ttzkxlcjv.cmd';
 fs.writeFile(cmdFile, str);
 exec(cmdFile, function(err, stdout, stderr) {
 if (err || stderr) return console.log(err, stdout, stderr);
 // 用nodejs刪除文件
 fs.unlink(cmdFile);
 func(text, stdout);
 });
};

這里面涉及到cmd clip的另一個用法,即 clip < a_text.txt,這樣會將后面這個文件的內(nèi)容,復制出來。 這里面還有個小坑。即在批處理文件中,加入del "%~f0"刪除自身,本來是可以用的,但在nodejs里執(zhí)行卻會報錯,后來我猜想,應該是因為批處理文件在執(zhí)行到刪除自身的命令時,進程還被nodejs引用著,結(jié)果報錯了。后來只有調(diào)用nodejs的fs.unlink命令,刪除那個批處理文件。

總結(jié)

通過實現(xiàn)這個功能,我學會了使用Request包,調(diào)用系統(tǒng)命令,clip的使用方法。果然實實在在的需求,才是最強的生產(chǎn)力。

要是linux或mac系統(tǒng),實現(xiàn)此功能就簡單多了。

clip命令不只可以復制文本,大家可以探索下。

備: 最近嫌每次都要自己ctrl+v太麻煩,所以我使用fs.readFile與fs.writeFile,將請求回來的token直接寫入我的配置文件。以上的剪切板功能也就沒用上了,不過我覺得很適合記錄下來這次經(jīng)歷。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • node+express+jade制作簡單網(wǎng)站指南

    node+express+jade制作簡單網(wǎng)站指南

    上文我們介紹了使用node+express+ejs制作頁面,今天我們來看看使用node+express+jade制作簡單網(wǎng)站,本文記錄了一下整個搭建過程,給需要的小伙伴們參考下吧
    2014-11-11
  • node.js中的fs.link方法使用說明

    node.js中的fs.link方法使用說明

    這篇文章主要介紹了node.js中的fs.link方法使用說明,本文介紹了fs.link的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js實現(xiàn)發(fā)送郵件功能

    Node.js實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了Node.js實現(xiàn)發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • CentOS 安裝NodeJS V8.0.0的方法

    CentOS 安裝NodeJS V8.0.0的方法

    這篇文章主要介紹了CentOS 安裝NodeJS V8.0.0的方法,需要的朋友可以參考下
    2017-06-06
  • node-sass@4.14.1報錯的最終解決方案分享

    node-sass@4.14.1報錯的最終解決方案分享

    最近在安裝node-sass@4.14.1的時候遇到了些問題,所以下面這篇文章主要給大家介紹了關(guān)于node-sass@4.14.1報錯的最終解決方案,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • windows使用nvm對node進行版本管理切換的完整步驟

    windows使用nvm對node進行版本管理切換的完整步驟

    這篇文章主要介紹了windows使用nvm對node進行版本管理切換的完整步驟,在使用之前各位務必卸載掉自己安裝過的nvm或者node版本包括環(huán)境變量之類的,要保證自己的電腦完全沒有node環(huán)境,需要的朋友可以參考下
    2024-03-03
  • Node.JS中快速掃描端口并發(fā)現(xiàn)局域網(wǎng)內(nèi)的Web服務器地址(80)

    Node.JS中快速掃描端口并發(fā)現(xiàn)局域網(wǎng)內(nèi)的Web服務器地址(80)

    在 Node.JS 中進行端口掃描還是比較方便的,一般會有廣播和輪詢兩種方式。下文重點給大家介紹node.js 掃描端口并發(fā)現(xiàn)局域網(wǎng)內(nèi)的web服務器地址的方法,一起看看吧
    2017-09-09
  • node.js文件的壓縮解壓問題

    node.js文件的壓縮解壓問題

    這篇文章主要介紹了node.js文件的壓縮解壓問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳解用node搭建簡單的靜態(tài)資源管理器

    詳解用node搭建簡單的靜態(tài)資源管理器

    本篇文章主要介紹了詳解用node搭建簡單的靜態(tài)資源管理器,主要用node的fs模塊,自己手寫一個簡單的靜態(tài)資源管理器。有興趣的可以了解一下
    2017-08-08
  • 純異步nodejs文件夾(目錄)復制功能

    純異步nodejs文件夾(目錄)復制功能

    這篇文章主要介紹了純異步nodejs文件夾(目錄)復制功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09

最新評論