摘要:什么是模塊是的一個子進程模塊,可以用來創(chuàng)建一個子進程,并執(zhí)行一些任務。格式化數(shù)據(jù)插件配置插件配置引入寫的服務監(jiān)聽這個接口這里校驗請求的密碼密碼錯誤小結模塊,主要是用的,需要注意的是,這個函數(shù)只會創(chuàng)建異步進程,具體的可以參考官網(wǎng)。
什么是child_process
child_process模塊是nodejs的一個子進程模塊,可以用來創(chuàng)建一個子進程,并執(zhí)行一些任務。執(zhí)行一些什么任務呢?shell命令知道吧,有了child_process模塊,就可以直接在js里面調用shell命令去完成一些非??犰诺牟僮髁耍。?br>舉個栗子,GitHub、碼云等git代碼托管網(wǎng)站,都會有個webHook功能,當push了新的代碼后,服務器可以開辟一個接口去接受這個webHook的請求,并進行git pull、npm run build等命令,從而達到自動化部署的目的!
來個小demo 目錄結構前端直接簡單用的vue-cli腳手架新建了個項目,后端是用的express
前端代碼就不曬了,都是腳手架生成的,后端代碼主要就是一個server.js和一個執(zhí)行shell的方法。
backend/server.jsbackend/server.js
注意先要安裝幾個依賴:express和body-parser
express是主角,不用多說,body-parser是用來解析post請求的參數(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")//引入寫的服務 app.post("/api/git_hook",async (req, res) => {//監(jiān)聽這個接口 if(req.body.password !== "666"){// 這里校驗post請求的密碼 res.send("密碼錯誤") 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) }) }) }小結
child_process模塊,主要是用的child_process.spawn(),需要注意的是,這個函數(shù)只會創(chuàng)建異步進程,具體的API可以參考官網(wǎng)。異步進程的話,不會阻塞主進程的執(zhí)行,所以我backend/service/git-push.js里面用async function來進行異步回調的控制。child_process模塊還提供了創(chuàng)建同步子進程的方法 child_process.spawnSync,了解nodejs比較多的同學可能會發(fā)現(xiàn),跟異步的方法相比,就是最后面加了個Sync,嗯,也可以這么理解吧。
希望大家多了解下這個模塊,多動手操作下,能用到哪里 留下了非常大的想象空間!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/96965.html
摘要:嚴格來說,并不是單線程的。其他異步和事件驅動相關的線程通過來實現(xiàn)內部的線程池和線程調度。線程是最小的進程,因此也是單進程的。子進程中執(zhí)行的是非程序,提供一組參數(shù)后,執(zhí)行的結果以回調的形式返回。在子進程中通過和的機制來接收和發(fā)送消息。 ??node遵循的是單線程單進程的模式,node的單線程是指js的引擎只有一個實例,且在nodejs的主線程中執(zhí)行,同時node以事件驅動的方式處理IO...
摘要:子進程使用反序列化消息字符串為消息對象。在調用這類方法時,遍歷列表中的實例發(fā)送內部消息,子進程列表中的對應項收到內部消息并處理返回,父進程中再結合返回結果和對應著這個類實例維護的信息,保證功能的正確性。 在 Node.js 中,當我們使用 child_process 模塊創(chuàng)建子進程后,會返回一個 ChildProcess 類的實例,通過調用 ChildProcess#send(mess...
摘要:進程間通信的目的是為了讓不同的進程能夠互相訪問資源,并進程協(xié)調工作。這個過程的示意圖如下端口共同監(jiān)聽集群穩(wěn)定之路進程事件自動重啟負載均衡狀態(tài)共享模塊工作原理事件二測試單元測試性能測試三產(chǎn)品化項目工程化部署流程性能日志監(jiān)控報警穩(wěn)定性異構共存 內容 9.玩轉進程10.測試11.產(chǎn)品化 一、玩轉進程 node的單線程只不過是js層面的單線程,是基于V8引擎的單線程,因為,V8的緣故,前后...
閱讀 3821·2021-09-09 09:33
閱讀 3133·2019-08-30 15:56
閱讀 3104·2019-08-30 15:56
閱讀 3390·2019-08-30 15:55
閱讀 567·2019-08-30 15:53
閱讀 2237·2019-08-30 15:52
閱讀 725·2019-08-28 18:16
閱讀 2543·2019-08-26 13:51