Rohan Kumar
Rohan Kumar

Reputation: 5882

middleware not working on connect HTTP server

I am reading Professional Node.js and i'm trying to understand connect HTTP middleware framework. I created a simple middleware that returns a function that replies with a custom test string:

function replyText(text) {
  return function(req, res) {
    res.end(text);
  };
}

module.exports = replyText;

But when i try to use this middleware in a connect server. Node gives me an error:

/Users/socomo22/work/hello_world_app_v2.js:8
var app = connect.createServer(replyText('Hello World!'));
                  ^
TypeError: undefined is not a function

But when i simply use:

var app = connect();
app.listen(8080)

It runs without giving any error. I don't understand whether i'm doing any syntatical mistake. How would i use this simple middleware? This is my connect server file:

var connect = require('connect');

// middlewares
var replyText = require('./reply_text');

var app = connect();

var app = connect.createServer(replyText('Hello World!'));
app.listen(8080, function() {
  console.log('listening on 8080 port')
});

Upvotes: 2

Views: 469

Answers (2)

vaibhav.thechamp
vaibhav.thechamp

Reputation: 1

Here You can start server in this way...

var connect = require('connect');
var http = require('http');
var app = connect();
var replyIN = require('./connetFile.js')
app.use(replyIN('Hello there m back again'));
http.createServer(app).listen(8888,function(){console.log('Server has started');});

And this is your connectFile.js

function replyIN(text){                                                                                              
    return function (req, res) {                                                                                      
        res.end(text);                                                                                                 
    };                                                                                                               
};                                                                                                                   
module.exports = replyIN;                                                                                        

Upvotes: 0

NiRUS
NiRUS

Reputation: 4259

As pointed by documentation use use API to mount a middleware and a http module to create an instance of server although you can create an instance just with connect as pointed here.

As pointed by @FranciscoPresencia adding .js extension while you require a your local module is optional.

var replyText = require('./reply_text.js');

So your code should look like this and i tested it. Working as intended

var connect = require('connect')
var http = require('http')
var app = connect();

// middlewares
var replyText = require('./reply_text.js');
app.use(replyText('Hello World!'));

http.createServer(app).listen(8080, function() {
  console.log('listening on 8080 port')
});

Note: Try to avoid ports like 8080, 80 etc as its a reserved ports that might be used by other apps. This sometimes may cause node to fail.


Adding the output screenshot for your reference

enter image description here

Upvotes: 1

Related Questions