成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

Donne / 2713人閱讀

摘要:什么是模塊是的一個子進程模塊,可以用來創(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 pullnpm run build等命令,從而達到自動化部署的目的!

來個小demo 目錄結構

前端直接簡單用的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")//引入寫的服務

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

相關文章

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

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

    JinB 評論0 收藏0
  • nodeJS進程

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

    happen 評論0 收藏0
  • nodeJS進程

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

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

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

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

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

    henry14 評論0 收藏0

發(fā)表評論

0條評論

Donne

|高級講師

TA的文章

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