node.js使用免費(fèi)的阿里云ip查詢獲取ip所在地【推薦】
在項(xiàng)目過程中,我們常常需要獲取IP的所在地。而這一功能一般都是通過一些數(shù)據(jù)網(wǎng)站的對(duì)外接口來實(shí)現(xiàn),這些接口一般情況下都是付費(fèi)使用的。在這篇文章中我將記錄,基于node.js的阿里云免費(fèi)IP地址查詢接口的使用。
1.購買服務(wù)
這是阿里云的一個(gè)AIP接口,點(diǎn)擊上面鏈接后你會(huì)進(jìn)入以下頁面

點(diǎn)擊購買后,會(huì)讓你登錄。阿里云可以用淘寶賬戶登錄,想來應(yīng)該大家都有。并且這個(gè)API不要錢100萬次查詢,應(yīng)該足夠支撐所有的非商業(yè)用途了。

購買后在控制臺(tái)的云市場中你可以找到這個(gè)訂單,點(diǎn)擊右側(cè)的接口進(jìn)入AIP使用教程界面

這里進(jìn)去之后是剛才的購買頁面,向下滑動(dòng)就可以看到該API的使用方法

這里有各種語言的官方示例,當(dāng)然意料之中的沒有Node版,所以下方我將介紹Node的使用方法
2.搭建服務(wù)器
由于本文主題是使用該接口,所以如果搭建服務(wù)器有描述不清的地方請(qǐng)大家諒解。
這里我使用express搭建的服務(wù)器
先創(chuàng)建一個(gè)test文件夾
文件夾里有兩個(gè)文件
第一個(gè)是test.js(服務(wù)器配置文件)
第二個(gè)是package.json(用于引入express模塊)

//這里是測試文件test.js
const http = require('http'),
express = require('express'),
app = express();
app.use('/',function (req,res) {//訪問localhost所有的請(qǐng)求都會(huì)進(jìn)入這里
res.send('服務(wù)器啟動(dòng)');
});
http.createServer(app).listen(80,'0.0.0.0');//創(chuàng)建服務(wù)器實(shí)例
{
"name": "test",
"version": "1.0.0",
"dependencies": {
"express": "latest"
}
}
//package.json
先在package.json中右鍵 npm install(cnpm也行)
我的編譯器是webstorm(不一樣的同學(xué)請(qǐng)按自己的來操作)

安裝完成后就可以運(yùn)行test.js了

服務(wù)器啟動(dòng)后我們打開瀏覽器測試一下


到這里服務(wù)器的搭建就完成了
下面進(jìn)入Api的使用
3.Api接口的調(diào)用
在之前的官方頁面中有個(gè)調(diào)試工具點(diǎn)進(jìn)去你會(huì)看見

根據(jù)這個(gè)我們進(jìn)行相關(guān)的配置
首先我們要引入https因?yàn)檫@個(gè)請(qǐng)求雖然是get但是要使用https(之前被這個(gè)卡了好久一直沒有找到原因)
let option = {
hostname:"dm-81.data.aliyun.com",//上圖的接口域名
path:`/rest/160601/ip/getIpInfo.json?ip=${ip}`,//上圖的path格式 在最后附上你要查詢的IP地址(我這里是獲取的用戶的IP)
headers:{//設(shè)置請(qǐng)求頭
"Content-Type":"application/json; charset=utf-8",
"Authorization": "APPCODE 這里是你阿里云中那個(gè)appcode",
}
};
appcode

配置參數(shù)完成后就可以開始寫https請(qǐng)求了
https.request使用方法與http.request 一致詳情請(qǐng)見官網(wǎng)文檔(http://nodejs.cn/api/http.html#http_http_request_options_callback)
let re = https.request(option,(Res)=>{//為了與外層的res區(qū)別故此處響應(yīng)文件用Res
Res.setEncoding('utf8');
if(Res.statusCode===200){//若http狀態(tài)碼為200則請(qǐng)求成功
Res.on('data', (data) => {
res.send(data);//將接口返回的數(shù)據(jù)返回到頁面上
});
}
});
re.on('error', (e) => {
console.error(`請(qǐng)求遇到問題: ${e.message}`);
});
re.end();
下面粘出完整代碼(需要的同學(xué)拿走請(qǐng)注明出處 把a(bǔ)ppcode換成你自己的即可 創(chuàng)作不易望大家點(diǎn)點(diǎn)訂閱 手動(dòng)滑稽)
//這里是測試文件
const http = require('http'),
https = require('https'),
express = require('express'),
app = express();
app.use('/',function (req,res) {//訪問localhost所有的請(qǐng)求都會(huì)進(jìn)入這里
let ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress;
let option = {
hostname:"dm-81.data.aliyun.com",//上圖的接口域名
path:`/rest/160601/ip/getIpInfo.json?ip=${ip}`,//上圖的path格式 在最后附上你要查詢的IP地址(我這里是獲取的用戶的IP)
headers:{//設(shè)置請(qǐng)求頭
"Content-Type":"application/json; charset=utf-8",
"Authorization": "APPCODE 你的appcode",
}
};
let re = https.request(option,(Res)=>{//為了與外層的res區(qū)別故此處響應(yīng)文件用Res
Res.setEncoding('utf8');
if(Res.statusCode===200){//若http狀態(tài)碼為200則請(qǐng)求成功
Res.on('data', (data) => {
res.send(data);//將接口返回的數(shù)據(jù)返回到頁面上
});
}
});
re.on('error', (e) => {
console.error(`請(qǐng)求遇到問題: ${e.message}`);
});
re.end();
});
http.createServer(app).listen(80,'0.0.0.0');//創(chuàng)建服務(wù)器實(shí)例
然后我們再次訪問 服務(wù)器那個(gè)頁面返回結(jié)果如下(這里我是本地測試所以返回值為內(nèi)網(wǎng)IP)

到這里就可以查到訪問用戶的IP所在地了
總結(jié)
以上所述是小編給大家介紹的node.js使用免費(fèi)的阿里云ip查詢獲取ip所在地,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
[將免費(fèi)進(jìn)行到底]在Amazon的一年免費(fèi)服務(wù)器上安裝Node.JS, NPM和OurJS博客
此文是介紹如何在Amazon的一年免費(fèi)計(jì)劃上安裝Node.JS, NPM還有搭建OurJS博客系統(tǒng)。,需要的朋友可以參考下2014-08-08
nodejs和C語言插入mysql數(shù)據(jù)庫亂碼問題的解決方法
這篇文章主要介紹了nodejs和C語言插入mysql數(shù)據(jù)庫亂碼問題,需要的朋友可以參考下2017-04-04
在Express中提供靜態(tài)文件的實(shí)現(xiàn)方法
這篇文章主要介紹了在Express中提供靜態(tài)文件的實(shí)現(xiàn)方法,將包含靜態(tài)資源的目錄的名稱傳遞給 express.static 中間件函數(shù),以便開始直接提供這些文件,感興趣的可以了解一下2019-10-10
Node.js連接數(shù)據(jù)庫實(shí)現(xiàn)過程詳解
這篇文章主要為大家介紹了Node.js連接數(shù)據(jù)庫實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
基于NodeJS的前后端分離的思考與實(shí)踐(四)安全問題解決方案
本文就在前后端分離模式的架構(gòu)下,針對(duì)前端在Web開發(fā)中,所遇到的安全問題以及應(yīng)對(duì)措施和注意事項(xiàng),并提出解決方案。2014-09-09
node.js+express制作網(wǎng)頁計(jì)算器
這篇文章主要介紹了node.js+express制作網(wǎng)頁計(jì)算器的相關(guān)資料,需要的朋友可以參考下2016-01-01
Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫及頁面數(shù)據(jù)傳遞操作實(shí)例分析
這篇文章主要介紹了Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫及頁面數(shù)據(jù)傳遞操作,結(jié)合實(shí)例形式分析了node.js查詢MongoDB數(shù)據(jù)庫及vue前臺(tái)頁面渲染等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12

