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了,可以进行数据的获取
具体使用场景根据自己的需要而定······