摘要:什么是模塊是的一個(gè)子進(jìn)程模塊,可以用來創(chuàng)建一個(gè)子進(jìn)程,并執(zhí)行一些任務(wù)。格式化數(shù)據(jù)插件配置插件配置引入寫的服務(wù)監(jiān)聽這個(gè)接口這里校驗(yàn)請(qǐng)求的密碼密碼錯(cuò)誤小結(jié)模塊,主要是用的,需要注意的是,這個(gè)函數(shù)只會(huì)創(chuàng)建異步進(jìn)程,具體的可以參考官網(wǎng)。
什么是child_process
child_process模塊是nodejs的一個(gè)子進(jìn)程模塊,可以用來創(chuàng)建一個(gè)子進(jìn)程,并執(zhí)行一些任務(wù)。執(zhí)行一些什么任務(wù)呢?shell命令知道吧,有了child_process模塊,就可以直接在js里面調(diào)用shell命令去完成一些非常酷炫的操作了!!
舉個(gè)栗子,GitHub、碼云等git代碼托管網(wǎng)站,都會(huì)有個(gè)webHook功能,當(dāng)push了新的代碼后,服務(wù)器可以開辟一個(gè)接口去接受這個(gè)webHook的請(qǐng)求,并進(jìn)行git pull、npm run build等命令,從而達(dá)到自動(dòng)化部署的目的!
前端直接簡(jiǎn)單用的vue-cli腳手架新建了個(gè)項(xiàng)目,后端是用的express
前端代碼就不曬了,都是腳手架生成的,后端代碼主要就是一個(gè)server.js和一個(gè)執(zhí)行shell的方法。
backend/server.jsbackend/server.js
注意先要安裝幾個(gè)依賴:express和body-parser
express是主角,不用多說,body-parser是用來解析post請(qǐng)求的參數(shù)的。
const express = require("express"); const app = express(); const port = process.env.PORT || 8080; const www = process.env.WWW || "./fontend/dist"; var bodyParser = require("body-parser")//格式化body數(shù)據(jù) app.use(bodyParser.urlencoded({extended: false}));//body parser插件配置 app.use(bodyParser.json());//body parser插件配置 const gitPush = require("./service/git-push")//引入寫的服務(wù) app.post("/api/git_hook",async (req, res) => {//監(jiān)聽這個(gè)接口 if(req.body.password !== "666"){// 這里校驗(yàn)post請(qǐng)求的密碼 res.send("密碼錯(cuò)誤") return } const code = await gitPush() res.send("hello world" + code) }) app.use(express.static(www)); console.log(`serving ${www}`); app.get("*", (req, res) => { res.sendFile(`index.html`, { root: www }); }); app.listen(port, () => console.log(`listening on http://localhost:${port}`));backend/service/git-push.js
const childProcess = require("child_process"); const path = require("path") module.exports = async function (params) { await createGitPullPromise() return await createPackPromise() } function createPackPromise(){ return new Promise((res, rej) => { const compile = childProcess.spawn("npm", ["run", "build"], {cwd: path.resolve(__dirname, "../../fontend")}) compile.on("close", code => { // console.log(code) res(code) }) }) } function createGitPullPromise(){ return new Promise((res, rej) => { const compile = childProcess.spawn("git", ["pull"], {cwd: path.resolve(__dirname, "../../fontend")}) compile.on("close", code => { // console.log(code) res(code) }) }) }小結(jié)
child_process模塊,主要是用的child_process.spawn(),需要注意的是,這個(gè)函數(shù)只會(huì)創(chuàng)建異步進(jìn)程,具體的API可以參考官網(wǎng)。異步進(jìn)程的話,不會(huì)阻塞主進(jìn)程的執(zhí)行,所以我backend/service/git-push.js里面用async function來進(jìn)行異步回調(diào)的控制。child_process模塊還提供了創(chuàng)建同步子進(jìn)程的方法 child_process.spawnSync,了解nodejs比較多的同學(xué)可能會(huì)發(fā)現(xiàn),跟異步的方法相比,就是最后面加了個(gè)Sync,嗯,也可以這么理解吧。
希望大家多了解下這個(gè)模塊,多動(dòng)手操作下,能用到哪里 留下了非常大的想象空間!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96965.html
摘要:嚴(yán)格來說,并不是單線程的。其他異步和事件驅(qū)動(dòng)相關(guān)的線程通過來實(shí)現(xiàn)內(nèi)部的線程池和線程調(diào)度。線程是最小的進(jìn)程,因此也是單進(jìn)程的。子進(jìn)程中執(zhí)行的是非程序,提供一組參數(shù)后,執(zhí)行的結(jié)果以回調(diào)的形式返回。在子進(jìn)程中通過和的機(jī)制來接收和發(fā)送消息。 ??node遵循的是單線程單進(jìn)程的模式,node的單線程是指js的引擎只有一個(gè)實(shí)例,且在nodejs的主線程中執(zhí)行,同時(shí)node以事件驅(qū)動(dòng)的方式處理IO...
摘要:通過將的給出來的進(jìn)程。恩吞吐率關(guān)于吞吐率有多種解讀,一種是描繪服務(wù)器單位時(shí)間處理請(qǐng)求的能力。而根據(jù)這個(gè)描述的話他的單位就為而這個(gè)指標(biāo)就是上面數(shù)據(jù)中的當(dāng)然,肯定是越大越好了吞吐量這個(gè)和上面的吞吐率很有點(diǎn)關(guān)系的。 首先鄭重聲明:nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言! 重要的事情說3遍。 因?yàn)?..
摘要:通過將的給出來的進(jìn)程。恩吞吐率關(guān)于吞吐率有多種解讀,一種是描繪服務(wù)器單位時(shí)間處理請(qǐng)求的能力。而根據(jù)這個(gè)描述的話他的單位就為而這個(gè)指標(biāo)就是上面數(shù)據(jù)中的當(dāng)然,肯定是越大越好了吞吐量這個(gè)和上面的吞吐率很有點(diǎn)關(guān)系的。 首先鄭重聲明:nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言! 重要的事情說3遍。 因?yàn)?..
摘要:子進(jìn)程使用反序列化消息字符串為消息對(duì)象。在調(diào)用這類方法時(shí),遍歷列表中的實(shí)例發(fā)送內(nèi)部消息,子進(jìn)程列表中的對(duì)應(yīng)項(xiàng)收到內(nèi)部消息并處理返回,父進(jìn)程中再結(jié)合返回結(jié)果和對(duì)應(yīng)著這個(gè)類實(shí)例維護(hù)的信息,保證功能的正確性。 在 Node.js 中,當(dāng)我們使用 child_process 模塊創(chuàng)建子進(jìn)程后,會(huì)返回一個(gè) ChildProcess 類的實(shí)例,通過調(diào)用 ChildProcess#send(mess...
摘要:進(jìn)程間通信的目的是為了讓不同的進(jìn)程能夠互相訪問資源,并進(jìn)程協(xié)調(diào)工作。這個(gè)過程的示意圖如下端口共同監(jiān)聽集群穩(wěn)定之路進(jìn)程事件自動(dòng)重啟負(fù)載均衡狀態(tài)共享模塊工作原理事件二測(cè)試單元測(cè)試性能測(cè)試三產(chǎn)品化項(xiàng)目工程化部署流程性能日志監(jiān)控報(bào)警穩(wěn)定性異構(gòu)共存 內(nèi)容 9.玩轉(zhuǎn)進(jìn)程10.測(cè)試11.產(chǎn)品化 一、玩轉(zhuǎn)進(jìn)程 node的單線程只不過是js層面的單線程,是基于V8引擎的單線程,因?yàn)椋琕8的緣故,前后...
閱讀 3738·2021-09-09 09:33
閱讀 3024·2019-08-30 15:56
閱讀 3017·2019-08-30 15:56
閱讀 3307·2019-08-30 15:55
閱讀 499·2019-08-30 15:53
閱讀 2179·2019-08-30 15:52
閱讀 662·2019-08-28 18:16
閱讀 2391·2019-08-26 13:51