Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not working... #17

Closed
LucGranato opened this issue Oct 15, 2015 · 4 comments
Closed

Not working... #17

LucGranato opened this issue Oct 15, 2015 · 4 comments

Comments

@LucGranato
Copy link

My server code is the following...

/* CÓDIGOS DE ERRO (lista completa em https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) */
var util = require('util');

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

var mongoose = require('mongoose');
var bodyParser = require('body-parser');

var passport = require('passport');
var BasicStrategy = require('passport-http').BasicStrategy;

var User = require('./models/user');

// MongoDB
mongoose.connect('mongodb://localhost/remotelinkdb');

var api = express.Router();
var device = express.Router();
var mobile = express.Router();

// Passport Basic Authorization
passport.use(new BasicStrategy(

    function(userid, password, done) {

        User.findOne({ email: userid }, function (err, user) {

            if (err) { return done(err); }
            if (!user) { return done(null, false); }
            if (!user.verifyPassword(password)) { return done(null, false); }
            return done(null, user);
        });
    }
));


/*********************************** Router mobile *********************************/

mobile.use('/sendinstallation', function (req, res, next) {
    if (!req.body['installationId']) return res.status(400).send("Installation missing.");
    req.body['lastConnection'] = Date.now();

    mongoose.model('installation').findOne({'installationId' : req.body['installationId']})
        .then(function (installation) {

            if (installation) {
                installation.set(req.body);
                return installation.save();
            }

            var Installation = mongoose.model('installation');
            var newinstallation = new Installation(req.body);

            return newinstallation.save();

        }).then(function (savedInstallation) {

            return res.status(200).send(savedInstallation);

        }).catch(function (e) {

            util.error(e);
            return res.status(400).send('Error 1011');

        });
});

/***********************************************************************************/


/*********************************** Router device *********************************/

device.use('/', require('./routes/hardware')); //SEM AUTENTICAÇÃO POR ENQUANTO

/***********************************************************************************/


/*********************************** Router api *********************************/

api.use(passport.initialize());

// Passport Basic Authorization
passport.use(new BasicStrategy(

    function(userid, password, done) {

        User.findOne({ email: userid }, function (err, user) {

            if (err) { return done(err); }
            if (!user) { return done(null, false); }
            if (!user.verifyPassword(password)) { return done(null, false); }
            return done(null, user);
        });
    }
));

api.use('/', passport.authenticate('basic', { session: false}), require('./routes/api'));
api.use('/func', require('./routes/cloud'));

// Login
api.use('/login', function(req, res) {
    res.json(req.user);
});

// Static folder
api.use('/file', express.static('public/temp'));

/**********************************************************************************/

var app = express();

app.use(subdomain('api', api));
app.use(subdomain('device', device));
app.use(subdomain('mobile', mobile));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use('/', function(req, res) {
    var url = req.protocol + '://' + req.get('host') + req.originalUrl;
    res.send(url);
});

// Start server
app.listen(3000);
util.log("Server running on port 3000");

Does anyone know why it's not working?

Even when I call ( api.beetrack.com.br/login ) I get response from app.use('/', function(req, res) { ......

Thanks in advance!

@bmullan91
Copy link
Owner

Hi @LucGranato, great find!

It's because the it's a multi-level TLD (.com.br) - express splits the url by '.' and the last two items in the array are considered the 'host' - everything before them will be added to the req.subdomains array, which this module uses to check against.

Therefore, to make it work in your case, add '.beetrack' to the string you pass to subdomain:

app.use(subdomain('api.beetrack', api));
app.use(subdomain('device.beetrack', device));
app.use(subdomain('mobile.beetrack', mobile));

PS. I've wrote some tests to check that this works in #18. I'll make sure and update the readme describing this 😄.

@LucGranato
Copy link
Author

Thanks a lot @bmullan91 !
It worked perfectly! Congrats..
Muito obrigado (from Brazil)..

@MoLow
Copy link

MoLow commented Nov 9, 2016

This could also be solved with subdomain offset in http://expressjs.com/en/4x/api.html#app.settings.table

@pascalfossouo
Copy link

@MoLow
Please I have some problem with express-subdomain
app.js
var express = require('express');
var router = express.Router();
var app = express();
var index = require('./routes/index');
app.use('/', index);
app.listen(3000);

and index.js

const
subdomain = require('express-subdomain'),
express = require('express'),
router = express.Router();

function init(server) {
server.use(subdomain('api', router))

server.get('/', function (req, res) {
    res.redirect('/home');
});

router.get('/', function(req, res) {
res.send('Welcome to our API!');
});
 
router.get('/users', function(req, res) {
	res.json([
		{ name: "Brian" }
	]);
});
	
server.get('*', function (req, res, next) {
    console.log('Request was made to: ' + req.originalUrl);
    return next();
});

}

module.exports = {
init: init
};

getting this error

throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
^

TypeError: Router.use() requires a middleware function but got a Object
at Function.use (C:\node\my-contract\node_modules\express\lib\router\index.js:458:13)
at Function. (C:\node\my-contract\node_modules\express\lib\application.js:220:21)
at Array.forEach ()
at Function.use (C:\node\my-contract\node_modules\express\lib\application.js:217:7)
at Object. (C:\node\my-contract\sub.js:17:5)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants