electron中使用node的子进程创建本地的web server

57 篇文章 0 订阅
53 篇文章 0 订阅

http创建web server官网:
https://nodejs.org/api/http.html#http_class_http_server

刚开始,是要在electron中使用node,创建本地服务器
首先要有个server.js

const http = require('http');

//const hostname = '127.0.0.1';  //可以不写,或者写localhost
const port = 7888;

// 通过 createServer 创建 web服务器
const server = http.createServer((req, res) => {
  //req 请求体:获取请求相关的信息(请求来自哪里、是get还是post)
  //res 响应体:告诉服务器给请求响应什么内容
  console.log('req'+req,'res'+res+'server.js-------14行')
  // 设置响应的请求头状态码是200
  res.statusCode = 200;
  // 设置返回的文本类型:纯文本text/plain
  res.setHeader('Content-Type', 'application/json');  //序列化后的 JSON 字符串
  // 最后给客户端返回 hello world
  res.end('Hello World!\n'+res+'server.js-----20');
});
//  处理请求, request与click事件一致, 有请求就会触发request
server.on("request", function(request, response){
    console.log("创建服务器成功: http://localhost:3000");
    // 回调函数的第一参数: 报文的信息
    // 回调函数的第二参数: 响应的对象

    // 解决在客户端中文乱码问题
    response.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
    // 给予客户端响应的信息
    response.write("小阔爱已经在服务器收到了小姐姐的请求了");
    // 结束响应
    response.end();
})
server.on('clientError', (err, socket) => {
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});

server.on('close',() =>{
  console.log('server close')
})

server.on('connection',()=>{
  console.log('server connection')
})

server.on('error',(error)=>{
  console.log('server error,messmage is'+error)
})
// 通过 listen 监听端口 的请求 hostname有就写上,没有可以忽略
//server.listen(port, hostname, () => { 
server.listen(port,  () => { 

  console.log(`Server running at http://${hostname}:${port}/`);
});

然后直接可以在主进程文件中:
使用node的创建子进程的方法,具体的区别可以查看网址:
node的官网:https://nodejs.org/api/child_process.html
个人的博客:https://www.cnblogs.com/chyingp/p/node-learning-guide-child_process.html
所以在main.js中,electron起来后,创建子进程

const { app, BrowserWindow } = require('electron')
var child_process = require('child_process');
var exec = child_process.exec;
var openExec;
function createWindow() {
  // 创建浏览器窗口。
  win = new BrowserWindow()

  // 然后加载应用的 index.html。
  // win.loadFile('./src/card.html')
  win.loadFile('./src/login.html')

  // 打开开发者工具
  win.webContents.openDevTools()

  // 当 window 被关闭,这个事件会被触发。
  win.on('closed', () => {
    // 取消引用 window 对象,如果你的应用支持多窗口的话,
    // 通常会把多个 window 对象存放在一个数组里面,
    // 与此同时,你应该删除相应的元素。
    win = null

  })
//创建子进程,直接打开当前目录下的server.js
  openExec = exec('node ./server.js', function (error, stdout, stderr) {
    if (error) {
      console.log(error.stack);
      console.log('Error code: ' + error.code);
      return;
    }
    console.log('使用exec方法输出: ' + stdout);
    console.log(`stderr: ${stderr}`);
    console.log(process.pid)
  });
  // clientxx.init(event);
}

// Electron 会在初始化后并准备
// 创建浏览器窗口时,调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。
app.on('ready', createWindow);

// 当全部窗口关闭时退出。因为在electron关闭时,子进程一直存在,当下一次进入的时候,会提示端口占用,所以当应用窗口都关闭时,杀死node进程
app.on('window-all-closed', () => {
  // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
  // 否则绝大部分应用及其菜单栏会保持激活。
  if (process.platform !== 'darwin') {
    app.exit();
    // 判断openExec是否存在,存在就杀掉node进程
    if (!openExec) {
      // console.log('openExec is null')
    } else {
      exec('taskkill /f /t /im node.exe', function (error, stdout, stderr) {
        if (error) {
          console.log(error.stack);
          console.log('Error code: ' + error.code);
          return;
        }
        console.log('使用exec方法输出: ' + stdout);
        console.log(`stderr: ${stderr}`);
      });
    }
  }

})

就可以在项目中成功启动一个web server了,可以进行数据的获取

具体使用场景根据自己的需要而定······

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值