配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解
配置node服務(wù)器
在購(gòu)買(mǎi)好服務(wù)器后,用Xshell鏈接到服務(wù)器。
1、安裝nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash 或者 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
安裝完,關(guān)閉重新啟動(dòng)一下Xshell。
2、用nvm安裝node
// 查看當(dāng)前可安裝node版本 nvm ls-remote // 選擇'nodejs.org'官網(wǎng)LTS穩(wěn)定版本 nvm install v10.16.0 // 出現(xiàn)這樣的顯示表示安裝好了,默認(rèn)的是v10.16.0的node版本,6.9.0的npm版本 Now using node v10.16.0 (npm v6.9.0) Creating default alias: default -> v10.16.0 // 可以使用命令查看版本 node --version // nvm可以安裝多個(gè)node版本 nvm install v10.11.0 // 可以使用命令查看安裝了多少個(gè)node版本 nvm ls // 可以使用命令指定默認(rèn)的node版本,如果安裝了多個(gè)node版本,一定要指定一個(gè)默認(rèn)的版本 nvm alias default v10.11.0 // 如果你不想使用默認(rèn),只是零時(shí)用一下,可以使用命令 nvm use v10.11.0
3、安裝nginx
// 查看服務(wù)器系統(tǒng)版本 $ cat /etc/redhat-release // 安裝epel-release 源 yum install epel-release -y // 打開(kāi)源配置 vim /etc/yum.repos.d/nginx.repo // 在配置中設(shè)置nginx安裝源,具體可以參考nginx官網(wǎng)文檔('http://nginx.org/en/linux_packages.html#stable') [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 // 安裝nginx yum install nginx -y // 查看nginx是否安裝成功,成功的話會(huì)顯示路徑 whereis nginx
4、設(shè)置nginx
// 設(shè)置開(kāi)機(jī)啟動(dòng) systemctl enable nginx // 啟動(dòng)服務(wù),重啟是'systemctl restart nginx',停止是 'stop' systemctl start nginx // 重新加載,因?yàn)橐话阒匦屡渲弥?,不希望重啟服?wù),這時(shí)可以使用重新加載 systemctl reload nginx // 查看服務(wù)器狀態(tài) systemctl status nginx // 如果CentOS7 系統(tǒng)打開(kāi)了防火墻,還需打開(kāi)防火墻端口 firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd --reload firewall-cmd --list-service // 如果要使用反向代理,CentOS7 需要打開(kāi)網(wǎng)絡(luò)訪問(wèn)權(quán)限 setsebool httpd_can_network_connect 1
5、部署測(cè)試項(xiàng)目
// 創(chuàng)建文件夾
mkdir server
// 進(jìn)入文件夾
cd server
// 創(chuàng)建js文件
vim home.js
// 編寫(xiě)測(cè)試代碼,注意,這里的ip地址一定要配置成0.0.0.0,如果配置成127.0.0.1,外網(wǎng)會(huì)報(bào)錯(cuò)端口3000鏈接不通
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`服務(wù)器運(yùn)行在 http://${hostname}:${port}/`);
});
// 啟動(dòng)
node home.js
// 如果報(bào)錯(cuò)'Unhandled 'error' event',可能是端口被占用了,先查看端口占用情況
ps -ef|grep node
// 如果有占用,刪除占用,'xxxx'為'root'后的數(shù)字
skill -9 xxxxx
出現(xiàn):服務(wù)器運(yùn)行在 http://0.0.0.0:3000/ 即表示node運(yùn)行成功,運(yùn)行成功后,登錄阿里云后臺(tái)配置安全組規(guī)則
配置成功如下顯示:
允許 自定義 TCP 3000/3000 IPv4地址段訪問(wèn) 0.0.0.0/0 node后臺(tái)端口
然后就可以在瀏覽器地址欄輸入你的服務(wù)器公網(wǎng)ip地址加上:3000,成功出現(xiàn)Hello World即表示安全組配置成功
6、配置nginx
// 進(jìn)入 '/etc/nginx' 文件夾,查看下 'nginx.conf' 配置文件
cd /etc/nginx
ls
vim nginx.conf
// 低版本的nginx 'nginx.conf' 文件夾里有以下內(nèi)容
// # include /etc/nginx/conf.d/*.conf;
// # include /etc/nginx/sites-enabled/*;
// 去掉 '#' 號(hào)
// 創(chuàng)建nginx配置文件,文件名隨意,我一般喜歡用項(xiàng)目名加端口號(hào),比如 'wxServer-3000'
vim /etc/nginx/conf.d/wxServer-3000.conf
// 編寫(xiě)配置文件代碼
# 項(xiàng)目名字
upstream wxServer {
# 需要代理的node端口號(hào),也就是你寫(xiě)的端口號(hào)
server 0.0.0.0:3000;
# nginx最大連接數(shù)
keepalive 8;
}
# nginx服務(wù)器實(shí)例
server {
# 代理出去的端口號(hào),默認(rèn)Http協(xié)議的80端口,如果配置其它端口需要更改 SELinux 的設(shè)置
listen 0.0.0.0:80;
# 別人訪問(wèn)的域名或者ip地址,多個(gè)用空格隔開(kāi)
server_name lzf.fun www.lzf.fun;
# 錯(cuò)誤日志存放地址
access_log /var/log/nginx/wxServer-3000.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# proxy_pass 設(shè)置反向代理用服務(wù)器域名,不使用反向代理,直接用上面upstream的名字就可以了
proxy_pass http://wxServer/;
proxy_redirect off;
}
}
// 保存配置文件后,檢查是否編寫(xiě)錯(cuò)誤
nginx -t
// 出現(xiàn)以下內(nèi)容為正確
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
// 重新加載nginx服務(wù)器
systemctl reload nginx
// 在阿里云后臺(tái)開(kāi)啟80端口的安全組,然后在瀏覽器輸入域名,可以看到 'Hello World' 就表示nginx配置成功了
7、配置PM2
// 安裝PM2 npm install pm2 -g // 進(jìn)入你的node項(xiàng)目存放的文件夾,pwd是你的文件夾路徑 cd pwd // 啟動(dòng)pm2,--watch監(jiān)聽(tīng),每次改動(dòng)代碼自動(dòng)啟動(dòng),-i 1 啟動(dòng)一個(gè)實(shí)例,根據(jù)服務(wù)器又幾個(gè)核心設(shè)置 // -i 0 則會(huì)根據(jù)機(jī)器當(dāng)前核數(shù)自動(dòng)開(kāi)啟盡可能多的進(jìn)程 pm2 start home.js --watch -i 1 // 查看pm2 pm2 ls // 查看錯(cuò)誤日志 pm2 logs // 重啟 pm2 restart home.js // 停止,id通過(guò)查看獲得 pm2 stop home|id // 刪除 pm2 delete home|id // 了解程序的詳細(xì)信息 pm2 describe home|id // 關(guān)閉Xshell,刷新域名,還可以看見(jiàn) 'Hello World' 表示配置成功
鏈接微信公眾號(hào)接口配置
8、編寫(xiě)本地node代碼
const Koa = require('koa')
const cors = require('koa2-cors')
const Router = require('koa-router')
const crypto = require('crypto')
const app = new Koa()
// 微信配置
const config = {
wechat: {
appID: 'appID',
appsecret: 'appsecret',
token: 'Maya'
}
}
// 使用koa2-cors解決跨域問(wèn)題
app.use(
cors({
origin: ctx => {
if (ctx.url === '/test') {
return false
}
return '*'
},
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowMethods: ['GET', 'POST', 'DELETE'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept']
})
)
// 給微信驗(yàn)證的
const wxServer = new Router()
wxServer.get('/', async ctx => {
const { signature, timestamp, nonce, echostr } = ctx.query
const token = config.wechat.token
let hash = crypto.createHash('sha1')
const arr = [token, timestamp, nonce].sort()
hash.update(arr.join(''))
const shasum = hash.digest('hex')
if (shasum === signature) {
return (ctx.body = echostr)
}
ctx.status = 401
ctx.body = 'Invalid signature'
})
// 裝載所有路由
const router = new Router()
router.use('/forWx', wxServer.routes(), wxServer.allowedMethods())
// 加載路由中間件
app.use(router.routes()).use(router.allowedMethods())
app.listen(3000)
console.log('[demo] start-quick is starting at port 3000')
9、通過(guò)內(nèi)網(wǎng)穿透的方式測(cè)試本地代碼是否ok
1、通過(guò)localtunnel啟動(dòng)內(nèi)網(wǎng)穿透,不推薦,有可能啟動(dòng)成功,但是域名鏈接失敗
// 安裝 npm install -g localtunnel // 開(kāi)啟本地服務(wù)器 lt --port 3000
2、通過(guò)natapp啟動(dòng)內(nèi)網(wǎng)穿透,配置需要花費(fèi)一點(diǎn)時(shí)間
可以通過(guò)內(nèi)網(wǎng)穿透工具natapp!這篇文章安裝配置,
如果你代碼寫(xiě)的是開(kāi)啟3000端口,那么最好也配置成3000端口
tips:如果看到隧道鏈接成功,但是127.0.0.1:3000端口鏈接失敗的提示,不代表安裝配置失敗,是需要你啟動(dòng)一下代碼
安裝配置成功后,啟動(dòng)
node home.js
能夠成功在瀏覽器上看到 Invalid signature 表示內(nèi)網(wǎng)穿透成功
10、開(kāi)啟一個(gè)微信公眾平臺(tái)測(cè)試賬號(hào)
在微信公眾平臺(tái)測(cè)試管理頁(yè)面,接口配置信息,URL填寫(xiě)你natapp啟動(dòng)的域名加上forWx,比如我的域名是
http://qf7rja.natappfree.cc/forWx
Token是你自己自定義的,可以隨便寫(xiě),但是要和你本地代碼里的Token一致,我這里用的是Maya
點(diǎn)擊提交,顯示配置成功
11、服務(wù)器鏈接微信公眾號(hào)接口配置
通過(guò)上面的測(cè)試賬號(hào),驗(yàn)證了代碼沒(méi)有問(wèn)題,可以配置成功接口配置,剩下的就是把代碼上傳到服務(wù)器了,安裝選擇rz和sz,當(dāng)然,使用xftp更好
// 安裝 yum install lrzsz -y // 上傳,執(zhí)行命令,選擇打包文件 rz // 下載,filename是你打包的服務(wù)器文件夾,或者單個(gè)文件 sz filename
上傳成功后,解壓縮,清除前面的 Hello World 代碼,清空 PM2 ,重新把現(xiàn)在代碼掛到 PM2 上
在瀏覽器上輸入域名 + forWx 能出現(xiàn) Invalid signature 表示成功,如果沒(méi)有出現(xiàn),配置不成功,需要排查原因
在微信公眾平臺(tái)登錄賬號(hào),選擇基本配置-->服務(wù)器配置,然后按照配置測(cè)試賬號(hào)的方式去配置
點(diǎn)擊提交,顯示配置成功
尾聲
噓~~~長(zhǎng)出了一口氣,研究了老久,node服務(wù)器總算配置成功了,而且已經(jīng)鏈接到公眾號(hào)接口配置,并且我還有一個(gè)測(cè)試賬號(hào)
可以用測(cè)試賬號(hào)本地寫(xiě)代碼,然后再上傳到服務(wù)器驗(yàn)證的方式去開(kāi)發(fā)
這樣的做的原因是,測(cè)試賬號(hào)玩壞了不心疼,轉(zhuǎn)眼又弄好了一個(gè),服務(wù)器玩壞了,配置起來(lái)可就麻煩了
剩下的就是開(kāi)發(fā)具體業(yè)務(wù)了,什么拿到AccessToken啊,自動(dòng)回復(fù)消息啊,自定義菜單啊,等等等等
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- node.js集成百度UE編輯器
- Node.js編寫(xiě)爬蟲(chóng)的基本思路及抓取百度圖片的實(shí)例分享
- Node Puppeteer圖像識(shí)別實(shí)現(xiàn)百度指數(shù)爬蟲(chóng)的示例
- nodejs根據(jù)ip數(shù)組在百度地圖中進(jìn)行定位
- 微信小程序訪問(wèn)node.js接口服務(wù)器搭建教程
- 詳解基于Node.js的微信JS-SDK后端接口實(shí)現(xiàn)代碼
- Node.js 實(shí)現(xiàn)簡(jiǎn)單的接口服務(wù)器的實(shí)例代碼
- 用NodeJS實(shí)現(xiàn)批量查詢地理位置的經(jīng)緯度接口
- 詳解nodejs微信jssdk后端接口
- 用Node編寫(xiě)RESTful API接口的示例代碼
- node 文件上傳接口的轉(zhuǎn)發(fā)的實(shí)現(xiàn)
- nodejs實(shí)現(xiàn)百度輿情接口應(yīng)用示例
相關(guān)文章
對(duì)node.js中render和send的用法詳解
今天小編就為大家分享一篇對(duì)node.js中render和send的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器
這篇文章主要為大家詳細(xì)介紹了WebSocket+node.js創(chuàng)建即時(shí)通信的Web聊天服務(wù)器的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08
手把手教你更優(yōu)雅的修改node_modules里的代碼
這篇文章主要給大家介紹了關(guān)于如何更優(yōu)雅的修改node_modules里的代碼的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02
node.js解決獲取圖片真實(shí)文件類型的問(wèn)題
這篇文章主要介紹了node.js解決獲取圖片真實(shí)文件類型的問(wèn)題,本文根據(jù)二進(jìn)制流及文件頭獲取文件類型mime-type,然后讀取文件二進(jìn)制的頭信息,獲取其真實(shí)的文件類型,需要的朋友可以參考下2014-12-12
node.js中的path.isAbsolute方法使用說(shuō)明
這篇文章主要介紹了node.js中的path.isAbsolute方法使用說(shuō)明,本文介紹了path.isAbsolute的方法說(shuō)明、語(yǔ)法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
nodejs與瀏覽器中全局對(duì)象區(qū)別點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于nodejs與瀏覽器中全局對(duì)象區(qū)別點(diǎn)總結(jié)內(nèi)容,對(duì)此有需要的朋友們可以學(xué)習(xí)下。2021-12-12
npm安裝淘寶鏡像報(bào)錯(cuò)問(wèn)題解決(npm install -g cnpm)
本文主要介紹了npm安裝淘寶鏡像報(bào)錯(cuò)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01

