Use let or const to avoid scope issues and hoisting
var express = require('../')
1'use strict'23var express = require('../')4 , request = require('supertest');56describe('req', function(){7 describe('.subdomains', function(){8 describe('when present', function(){9 it('should return an array', function(done){10 var app = express();1112 app.use(function(req, res){13 res.send(req.subdomains);14 });1516 request(app)17 .get('/')18 .set('Host', 'tobi.ferrets.example.com')19 .expect(200, ['ferrets', 'tobi'], done);20 })2122 it('should work with IPv4 address', function(done){23 var app = express();2425 app.use(function(req, res){26 res.send(req.subdomains);27 });2829 request(app)30 .get('/')31 .set('Host', '127.0.0.1')32 .expect(200, [], done);33 })3435 it('should work with IPv6 address', function(done){36 var app = express();3738 app.use(function(req, res){39 res.send(req.subdomains);40 });4142 request(app)43 .get('/')44 .set('Host', '[::1]')45 .expect(200, [], done);46 })47 })4849 describe('otherwise', function(){50 it('should return an empty array', function(done){51 var app = express();5253 app.use(function(req, res){54 res.send(req.subdomains);55 });5657 request(app)58 .get('/')59 .set('Host', 'example.com')60 .expect(200, [], done);61 })62 })6364 describe('with no host', function(){65 it('should return an empty array', function(done){66 var app = express();6768 app.use(function(req, res){69 req.headers.host = null;70 res.send(req.subdomains);71 });7273 request(app)74 .get('/')75 .expect(200, [], done);76 })77 })7879 describe('with trusted X-Forwarded-Host', function () {80 it('should return an array', function (done) {81 var app = express();8283 app.set('trust proxy', true);84 app.use(function (req, res) {85 res.send(req.subdomains);86 });8788 request(app)89 .get('/')90 .set('X-Forwarded-Host', 'tobi.ferrets.example.com')91 .expect(200, ['ferrets', 'tobi'], done);92 })93 })9495 describe('when subdomain offset is set', function(){96 describe('when subdomain offset is zero', function(){97 it('should return an array with the whole domain', function(done){98 var app = express();99 app.set('subdomain offset', 0);100101 app.use(function(req, res){102 res.send(req.subdomains);103 });104105 request(app)106 .get('/')107 .set('Host', 'tobi.ferrets.sub.example.com')108 .expect(200, ['com', 'example', 'sub', 'ferrets', 'tobi'], done);109 })110111 it('should return an array with the whole IPv4', function (done) {112 var app = express();113 app.set('subdomain offset', 0);114115 app.use(function(req, res){116 res.send(req.subdomains);117 });118119 request(app)120 .get('/')121 .set('Host', '127.0.0.1')122 .expect(200, ['127.0.0.1'], done);123 })124125 it('should return an array with the whole IPv6', function (done) {126 var app = express();127 app.set('subdomain offset', 0);128129 app.use(function(req, res){130 res.send(req.subdomains);131 });132133 request(app)134 .get('/')135 .set('Host', '[::1]')136 .expect(200, ['[::1]'], done);137 })138 })139140 describe('when present', function(){141 it('should return an array', function(done){142 var app = express();143 app.set('subdomain offset', 3);144145 app.use(function(req, res){146 res.send(req.subdomains);147 });148149 request(app)150 .get('/')151 .set('Host', 'tobi.ferrets.sub.example.com')152 .expect(200, ['ferrets', 'tobi'], done);153 })154 })155156 describe('otherwise', function(){157 it('should return an empty array', function(done){158 var app = express();159 app.set('subdomain offset', 3);160161 app.use(function(req, res){162 res.send(req.subdomains);163 });164165 request(app)166 .get('/')167 .set('Host', 'sub.example.com')168 .expect(200, [], done);169 })170 })171 })172 })173})
Same data, no extra tab — call code_get_file + code_get_findings over MCP from Claude/Cursor/Copilot.