Restudy Node.js

本文不保证完全正确,希望对本文有意见的朋友通过写在关于界面的联系方式联系我。

本文的链接不会更改,以保持持续更新。

以前我都是利用Electron来开发桌面应用程序,其本质上是一个Chromium浏览器,你可以用Node.js来控制主进程和渲染进程。因为这样,你不需要太多桌面应用程序开发经验,就能像写网站一样创建出一个漂亮的程序出来,像XMIND、Discord、Atom等程序其实都是基于此的。

但是Node.js的潜力不应该只是这样,我们可以发现RSSHub就是基于Node.js写的,Node.js在后端方面的表现仍然不容小觑。尽管我们看到Go、Rust等语言确实不错,也有人对Node.js唱衰,但是这并不影响阿里一些程序仍然基于Node.js,多掌握这么一项技能也是不错的。

接下来的,我以目前的最新版本13.8.0进行说明(请不要同时在Windows和WSL安装Node.js,因为后者的默认PATH设置我认为是个错误)。

安装Electron

目前安装Electron的时候会从GitHub上面下载需要的文件,可以设置下面的环境变量使用代理:

1
2
export ELECTRON_GET_USE_PROXY=true
export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080 #仅限Node版本大于v10

创建HTTPS服务器

在Node.js中,你可使用HTTPSHTTP/2模块创建支持HTTPS的服务器。一个HTTP/2服务器的示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const http2 = require('http2');
const fs = require('fs');

const server = http2.createSecureServer({
key: fs.readFileSync('localhost-privkey.pem'),
cert: fs.readFileSync('localhost-cert.pem')
});
server.on('error', (err) => console.error(err));

server.on('stream', (stream, headers) => {
// stream is a Duplex
stream.respond({
'content-type': 'text/html',
':status': 200
});
stream.end('<h1>Hello World</h1>');
});

server.listen(8443);

一个HTTPS服务器的示例如下(这里使用cert证书,当然你也可以选择pfx证书):

1
2
3
4
5
6
7
8
9
10
11
12
13
// curl -k https://localhost:8000/
const https = require('https');
const fs = require('fs');

const options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);

所以,请给你的后端加上HTTPS支持吧~

获取路径

__dirname:当前文件所在目录的绝对路径

__filename:当前文件的绝对路径

Promise API

参考:

使用子进程

1
2
3
4
5
6
7
8
require('child_process').exec('ls -a',{encoding: 'utf-8'},function(err,stdout,stderr){
if(err){
console.log(error.stack);
console.log('Error code:' + error.code);
console.log('Signal received:' + error.signal);
}
console.log('data:' + stdout);
});

参考:Node.js 子进程(exec、spawn、fork)

C++ 插件

请参考:C++ Addons

.node文件代表C++编译之后的插件。

N-API提供了一种不依赖于JS运行时,不受V8限制的接口。

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。转载需要标明作者,并以超链接的方式指向原文。
  • Copyrights © 2020 Kevin Li
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~