Вопрос

I need help in trying to solve this scenario

I have a file web.js. Over there I have

  var express = require("express");
  var app = express();       
  var web2 = require("./web2");
 /* Code the start the server on the required port*/

 app.get('/param1', function(req, res){
    console.log("INSIDE GET METHOD OF WEB.JS");
 });
 module.exports.app = app

I have another file web2.js. over there I have

var web = require("./web");
app = web.app;
app.get('/param2', function(req, res){
    console.log("INSIDE GET METHOD OF WEB2.JS");
});

While starting I get an error TypeError: Cannot call method 'post' of undefined

If I remove the line 3 from web.js -- I am able to start the server, but a request for http:///param2 gives a 404

Updated scenario:

I am using pg database and I try to create a client that keeps an instance of the client(in web.js). I then pass this to other file(web2.js). In web.js I always get this client as null

in web.js I have the following code

 var pg = require("pg");
 var pgclient;

app.get('*', function(req,res,next){
   pg.connect(process.env.DATABASE_URL, function(err, client, done) {
     if(client != null){
        pgclient = client;
        console.log("Client connection with Postgres DB is established");
        next();
      }
   }
 }  


 require("./web2.js")(app, pgclient);

in web2.js, I have the following code

module.exports = function(app, pgclient){
   app.get('/param1', function(req,res){
     if(pgclient != null){

     }
     else{
        res.send(500, "pgclient is NULL");
     }
   });
}

The code never reaches the if block(if(pgclient != null)) in web2.js

Это было полезно?

Решение

The problem is the cyclic dependency between web.js and web2.js. When web2.js requires web.js, web.js's module.exports hasn't been set yet. I would rather do something like this:

web.js

var express = require("express");
var app = express();

app.get("/param1", function (req, res) {
    // ...
});

require("./web2")(app);

app.listen(/* port number */);

web2.js

module.exports = function (app) {
    app.get("/param2", function (req, res) {
        // ...
    });
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top