You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在JavaScript中设置域名跳转至localhost:3000(MEAN栈应用)

嘿,这个需求其实挺常见的,分两种场景来实现,看你是只想在本地开发时用自定义域名,还是要对外提供访问~

方法1:本地Hosts文件映射(仅本地开发生效)

这是最简单的本地调试方案,不需要写任何JavaScript代码,直接修改系统的Hosts文件,把自定义域名指向你的本地IP(127.0.0.1):

  • Windows系统:路径是 C:\Windows\System32\drivers\etc\hosts
  • macOS/Linux系统:路径是 /etc/hosts

打开文件后添加一行:

127.0.0.1 www.something.com

保存后,在浏览器输入 www.something.com:3000 就能直接访问你的MEAN应用了。要是不想每次都带端口号,就需要用到下面的反向代理方案。

方法2:用Express实现重定向或反向代理

如果想让访问 www.something.com 时自动跳转到 localhost:3000,或者不带端口号直接访问,可以在你的Express应用里做配置:

方式A:直接重定向

在你的app.js里添加一个全局路由,检查请求的域名,符合条件就重定向到本地端口:

// 放在现有路由之前
app.get('*', (req, res, next) => {
  // 判断请求的主机名是否是目标域名
  if (req.hostname === 'www.something.com') {
    // 保留原请求路径,重定向到localhost:3000
    res.redirect(`http://localhost:3000${req.url}`);
  } else {
    // 不是目标域名,交给后续路由处理
    next();
  }
});

⚠️ 注意:这种方式需要先通过Hosts文件或域名解析,让www.something.com指向你的服务器(本地就是127.0.0.1),否则请求根本到不了你的Express应用。

方式B:反向代理(无端口访问)

如果想让用户访问www.something.com时不带端口号,直接代理到localhost:3000,可以用http-proxy-middleware中间件:

  1. 先安装依赖:
npm install http-proxy-middleware --save
  1. app.js里配置代理:
const { createProxyMiddleware } = require('http-proxy-middleware');

// 把所有请求代理到localhost:3000
app.use('/', createProxyMiddleware({
  target: 'http://localhost:3000',
  changeOrigin: true, // 必须开启,否则目标服务器会收到错误的主机名
}));
  1. 修改你的服务器监听端口为80(HTTP默认端口):
app.set('port', process.env.PORT || 80);
var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

⚠️ 注意:在Linux/macOS下监听80端口需要sudo权限,Windows需要以管理员身份运行终端。

额外提醒
  • 本地开发时,Hosts文件修改后可能需要刷新DNS缓存才能生效:Windows执行ipconfig /flushdns,macOS执行sudo dscacheutil -flushcache
  • 如果是公网部署,需要先在域名服务商处把www.something.com解析到你的服务器公网IP,再配置反向代理或重定向。

内容的提问来源于stack exchange,提问作者Nwlis

火山引擎 最新活动