前言
Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。
V8引擎执行Javascript的速度非常快,性能非常好。Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用
事件驱动, 非阻塞
I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
最近要学习Node.js开发服务器是一个头疼的问题,经过钻研和参考大量博客后采用如下方法
搭建环境:
Ubuntu 18.04 64位 系统
准备工作
1.安装nodejs及其包管理工具
$ sudo apt-get install nodejs
$ sudo apt-get install npm
2.在本地使用nodejs的koa框架编写微信接口
在自己的项目目录下安装nodejs的koa和sha包
/Project$ sudo npm install koa sha1
在自己的项目目录下建立文件app.js(微信的入口文件)以及wechat目录下的g.js
app.js代码如下
var Koa = require('koa')
var wechat = require('./wechat/g')
var config = {
wechat: {
appID: '',
appSecret: '',
token:''
}
}
var app = new Koa()
app.use(wechat(config.wechat))
app.listen(3001)//此地可以设置为其他端口,只要没有其他进程占用
g.js
var sha1 = require('sha1')
module.exports = function (opts) {
return function *(next) {
console.log(this.query)
var token = opts.token
var signature = this.query.signature
var nonce = this.query.nonce
var timestamp = this.query.timestamp
var echostr = this.query.echostr
var str = [token, timestamp, nonce].sort().join('')
var sha = sha1(str)
if (sha === signature) {
this.body = echostr + ''
}
else {
this.body = 'wrong'
}
}
}
/Project$ $ node --harmony app.js
koa deprecated Support for generators will be removed in v3. See the documentation for examples of how to convert old middleware https://github.com/koajs/koa/blob/master/docs/migration.md app.js:16:5
测试没问题
本地ip映射到内网
方法一
nodejs的localtunnel包
/Project$ npm install -g localtunne
/Project$ $ lt --port 3001
这样可以把本地的端口号映射到外网上并且动态分配一个URL
your url is: https://pretty-goose-2.localtunnel.me
但是由于localtunnel是国外项目速度很慢而且很容易崩所以建议用一下的方法
Error: connection refused: localtunnel.me:40982 (check your firewall settings)
方法二zuul-ngrok反向代理
$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
$ unzip ngrok-stable-linux-amd64.zip
$ ./ngrok http 3001
但是这样每次都需要申请一次很不方便
方法三
在http://center.tunnelnat.com上申请一个免费的ngrok代理会获取一个永久的域名
最后链接测试号
链接成功后在自己本机终端上会接受到你在微信测试号中发出的所有请求
这样自己本机的Ubuntu就可以作为微信服务器了,非常nice