我的服务器系统是 Linux,站点通过 Nginx 配置,目前
服务器安全组已开
防火墙端口已开
部署好 node 接口后,运行成功
mongodb 也运行成功
网站可以访问,但是加上:3003端口后,接口无法请求
请问是为什么呢?
按照二楼的说法,我引入了 os 依赖去获取 IPv4 地址,代码如下:
const http = require('http')
const express = require('express')
const app = express()
const os = require('os')
const mongoose = require('mongoose') // 引入 mongoose
// 连接 mongodb 数据库 writeOff
mongoose.connect('mongodb://localhost/writeOff', {
useNewUrlParser: true,
useUnifiedTopology: true
})
mongoose.set('useFindAndModify', false)
// 监控连接状态
const db = mongoose.connection
db.on('connected', () => {
console.log('mongoose connection success')
})
db.on('error', () => { // 数据库连接失败
console.log('mongoose connection fail')
})
// 允许跨域
app.all('*', (req, res, next) => {
// 设置允许跨域的域名,* 代表允许任意域名跨域
res.header('Access-Control-Allow-Origin', '*')
// 允许的 header 类型
res.header('Access-Control-Allow-Headers', 'content-type')
// 跨域允许的请求方式
res.header('Access-Control-Allow-Methods', 'DELETE,PUT,POST,GET,OPTIONS')
if (req.method.toLowerCase() == 'options')
res.sendStatus(200); // 让 options 尝试请求快速结束
else
next()
})
//获取本机ipv4地址
function getIPv4() {
//同一接口可能有不止一个IP4v地址,所以用数组存
let ipv4s = []
//获取网络接口列表对象
let interfaces = os.networkInterfaces();
Object.keys(interfaces).forEach((key) => {
interfaces[key].forEach((item) => {
//跳过IPv6 和 '127.0.0.1'
if ('IPv4' !== item.family || item.internal !== false) return
ipv4s.push(item.address); //可用的ipv4s加入数组
// console.log(key + '--' + item.address);
})
})
return ipv4s[0] //返回一个可用的即可
}
let ipv4 = getIPv4()
// http请求
http.createServer(app).listen(3003, '0.0.0.0', (err) => {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:' + 3003 + '\n' + 'or at http://' + ipv4 + ':' + 3003)
})
// 设计数据模型,创建集合
const schema = {
tel: Number
}
var Kitten = mongoose.model('2021-renovation', schema)
//
app.get('/add_code', (req, res) => {
res.send(req.query)
})
依旧成功运行
但是仍然无法访问
经测试 3000 3001 3002 端口均可正常运行接口
從你的描述現象與命令檢查結果看,本地可以訪問,外網地址不能,應該是你 Node 服務監聽的地址是
127.0.0.1
,而不是0.0.0.0
。你需要檢查一下你的 Node 代碼,修改掉監聽地址。或是修改 Nginx 配置,反代 Node 的地址。