热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nodejs最酷炫的模块——child_process子历程

什么是child_processchild_process模块是nodejs的一个子历程模块,能够用来建立一个子历程,并实行一些使命。实行一些什么使命呢?shell敕令晓得吧,有了
什么是child_process

child_process模块是nodejs的一个子历程模块,能够用来建立一个子历程,并实行一些使命。实行一些什么使命呢?shell敕令晓得吧,有了child_process模块,就能够直接在js内里挪用shell敕令去完成一些异常酷炫的操纵了!!
举个栗子,GitHub、码云等git代码托管网站,都邑有个webHook功用,当push了新的代码后,效劳器能够拓荒一个接口去接收这个webHook的要求,并举行git pullnpm run build等敕令,从而到达自动化布置的目标!

《nodejs最酷炫的模块——child_process - 子历程》

来个小demo

目次构造

前端直接简单用的vue-cli脚手架新建了个项目,后端是用的express

《nodejs最酷炫的模块——child_process - 子历程》

前端代码就不晒了,都是脚手架天生的,后端代码重要就是一个server.js和一个实行shell的要领。

backend/server.js

backend/server.js

注重先要装置几个依靠:
express
body-parser

express是主角,不必多说,
body-parser是用来剖析post要求的参数的。

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数据
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) => {//监听这个接口
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(),须要注重的是,这个函数只会建立异步历程,详细的API能够参考官网。异步历程的话,不会壅塞主历程的实行,所以我backend/service/git-push.js内里用async function来举行异步回调的掌握。child_process模块还供应了建立同步子历程的要领 child_process.spawnSync,相识nodejs比较多的同砚可能会发明,跟异步的要领比拟,就是最后面加了个Sync,嗯,也能够这么明白吧。
愿望人人多相识下这个模块,多着手操纵下,能用到哪里 留下了异常大的设想空间!


推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • npmrunbuild后dist文件夹下面直接浏览器打开index.html,css和js的路径都不正确。放到跟目录下就正常了,iis上同样只能在根目录下。我项目的目录如下: ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • 1.码云上根据需求创建项目;2.进入项目——克隆下载 选择复制SSH3.clone码云上的项目到本地:在相关目录(如A)下运行终端,执行指令:gitclone复制的SSH地址;  ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文详细介绍了如何创建和使用VUE uni-app开发环境,包括通过HBuilderX可视化界面和通过vue-cli命令执行的方法。文章内容简单清晰,易于学习与理解。通过学习本文,读者可以深入了解VUE uni-app开发环境,并通过实践验证掌握具体的使用情况。编程笔记将为读者推送更多相关知识点的文章,欢迎关注! ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • 1.移除consol.log()的babel插件安装:npmibabel-plugin-transform-remove-console-D配置:babel.config.js:这 ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
author-avatar
miya的发现王国sGA_998
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有