亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

nodejs最酷炫的模塊——child_process - 子進程

Donne / 2752人閱讀

摘要:什么是模塊是的一個子進程模塊,可以用來創(chuàng)建一個子進程,并執(zhí)行一些任務(wù)。格式化數(shù)據(jù)插件配置插件配置引入寫的服務(wù)監(jiān)聽這個接口這里校驗請求的密碼密碼錯誤小結(jié)模塊,主要是用的,需要注意的是,這個函數(shù)只會創(chuàng)建異步進程,具體的可以參考官網(wǎng)。

什么是child_process

child_process模塊是nodejs的一個子進程模塊,可以用來創(chuàng)建一個子進程,并執(zhí)行一些任務(wù)。執(zhí)行一些什么任務(wù)呢?shell命令知道吧,有了child_process模塊,就可以直接在js里面調(diào)用shell命令去完成一些非??犰诺牟僮髁耍?!
舉個栗子,GitHub、碼云等git代碼托管網(wǎng)站,都會有個webHook功能,當(dāng)push了新的代碼后,服務(wù)器可以開辟一個接口去接受這個webHook的請求,并進行git pull、npm run build等命令,從而達(dá)到自動化部署的目的!

來個小demo 目錄結(jié)構(gòu)

前端直接簡單用的vue-cli腳手架新建了個項目,后端是用的express

前端代碼就不曬了,都是腳手架生成的,后端代碼主要就是一個server.js和一個執(zhí)行shell的方法。

backend/server.js
backend/server.js
注意先要安裝幾個依賴:expressbody-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")//引入寫的服務(wù)

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)
        })
    })
}
小結(jié)

child_process模塊,主要是用的child_process.spawn(),需要注意的是,這個函數(shù)只會創(chuàng)建異步進程,具體的API可以參考官網(wǎng)。異步進程的話,不會阻塞主進程的執(zhí)行,所以我backend/service/git-push.js里面用async function來進行異步回調(diào)的控制。child_process模塊還提供了創(chuàng)建同步子進程的方法 child_process.spawnSync,了解nodejs比較多的同學(xué)可能會發(fā)現(xiàn),跟異步的方法相比,就是最后面加了個Sync,嗯,也可以這么理解吧。
希望大家多了解下這個模塊,多動手操作下,能用到哪里 留下了非常大的想象空間!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/96965.html

相關(guān)文章

  • nodejs中的進程,深入解析child_process模塊和cluster模塊

    摘要:嚴(yán)格來說,并不是單線程的。其他異步和事件驅(qū)動相關(guān)的線程通過來實現(xiàn)內(nèi)部的線程池和線程調(diào)度。線程是最小的進程,因此也是單進程的。子進程中執(zhí)行的是非程序,提供一組參數(shù)后,執(zhí)行的結(jié)果以回調(diào)的形式返回。在子進程中通過和的機制來接收和發(fā)送消息。 ??node遵循的是單線程單進程的模式,node的單線程是指js的引擎只有一個實例,且在nodejs的主線程中執(zhí)行,同時node以事件驅(qū)動的方式處理IO...

    JinB 評論0 收藏0
  • nodeJS進程

    摘要:通過將的給出來的進程。恩吞吐率關(guān)于吞吐率有多種解讀,一種是描繪服務(wù)器單位時間處理請求的能力。而根據(jù)這個描述的話他的單位就為而這個指標(biāo)就是上面數(shù)據(jù)中的當(dāng)然,肯定是越大越好了吞吐量這個和上面的吞吐率很有點關(guān)系的。 首先鄭重聲明:nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言! 重要的事情說3遍。 因為...

    happen 評論0 收藏0
  • nodeJS進程

    摘要:通過將的給出來的進程。恩吞吐率關(guān)于吞吐率有多種解讀,一種是描繪服務(wù)器單位時間處理請求的能力。而根據(jù)這個描述的話他的單位就為而這個指標(biāo)就是上面數(shù)據(jù)中的當(dāng)然,肯定是越大越好了吞吐量這個和上面的吞吐率很有點關(guān)系的。 首先鄭重聲明:nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言!nodeJS 是一門單線程!異步!非阻塞語言! 重要的事情說3遍。 因為...

    james 評論0 收藏0
  • 通過源碼解析 Node.js 中進程間通信中的 socket 句柄傳遞

    摘要:子進程使用反序列化消息字符串為消息對象。在調(diào)用這類方法時,遍歷列表中的實例發(fā)送內(nèi)部消息,子進程列表中的對應(yīng)項收到內(nèi)部消息并處理返回,父進程中再結(jié)合返回結(jié)果和對應(yīng)著這個類實例維護的信息,保證功能的正確性。 在 Node.js 中,當(dāng)我們使用 child_process 模塊創(chuàng)建子進程后,會返回一個 ChildProcess 類的實例,通過調(diào)用 ChildProcess#send(mess...

    HackerShell 評論0 收藏0
  • 深入淺出nodeJS - 4 - (玩轉(zhuǎn)進程、測試、產(chǎn)品化)

    摘要:進程間通信的目的是為了讓不同的進程能夠互相訪問資源,并進程協(xié)調(diào)工作。這個過程的示意圖如下端口共同監(jiān)聽集群穩(wěn)定之路進程事件自動重啟負(fù)載均衡狀態(tài)共享模塊工作原理事件二測試單元測試性能測試三產(chǎn)品化項目工程化部署流程性能日志監(jiān)控報警穩(wěn)定性異構(gòu)共存 內(nèi)容 9.玩轉(zhuǎn)進程10.測試11.產(chǎn)品化 一、玩轉(zhuǎn)進程 node的單線程只不過是js層面的單線程,是基于V8引擎的單線程,因為,V8的緣故,前后...

    henry14 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<