Express-子域没有路由

时间:2019-02-26 00:13:41

标签: node.js express

我正在使用https://www.npmjs.com/package/express-subdomain软件包中的示例设置。但是,当我在浏览器中尝试api.localhost:3000时,它会引发错误:“无法获取/”

如何使api.localhost:3000运行?我会考虑其他解决方案,而不仅仅是使用express-subdomain的解决方案,只要您不必在设置中输入fqdn即可。

app.js:

var subdomain = require('express-subdomain');
var express = require('express');
var app = express();

// *** Code examples below go here! ***
var router = express.Router();

//api specific routes
router.get('/', function(req, res) {
    res.send('Welcome to our API!');
});

router.get('/users', function(req, res) {
    res.json([
        { name: "Brian" }
    ]);
});

app.use(subdomain('api', router));
app.listen(3000);

package.json:

{
  "name": "auth_manager",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.3",
    "express-subdomain": "^1.0.5"
  }
}

2 个答案:

答案 0 :(得分:1)

我认为该API处于http://api.example.com/而不是api.localhost:3000中。但是,如果要在本地运行它们,建议您遵循https://www.npmjs.com/package/express-subdomain#developing-locally

答案 1 :(得分:0)

如果计划在本地开发时使用此中间件,则必须确保在您的hosts文件中列出了您的子域。请参阅here

在MacOS上:

  1. 调整主机文件以转发来自url的请求:

    sudo nano /etc/hosts

    127.0.0.1 myapp.dev

    127.0.0.1 api.myapp.dev

  2. 清除缓存:

    sudo killall -HUP mDNSResponder

  3. 快递:

    app.use(subdomain('api', router));

  4. 任何身份验证中间件都需要调整以对api.myapp.dev而非localhost进行身份验证

  5. 在Chrome中,您可以使用api.myapp.dev网址

  6. 如果您正在使用SSL(https)并具有自签名证书:Chrome通常会阻止主机文件URL(如果不是localhost)。然后,您需要在Chrome窗口中的任意位置单击,然后直接键入thisisunsafe,它将使您通过。请参阅此ticket