2016-05-26 9 views
0

In meiner Anwendung, ich habe drei Routen, dieNode.js Express app.use ('/ Route') in andere Route laufen?

http://localhost:8080/search 
http://localhost:8080/user  
http://localhost:8080/shop 

sind ich schreibe Routen in getrennter Datei, in server.js (die Datei laufen im Terminal):

app.use('/', require('./app/routes/index')(app,io,mongoose)); 

im Index. js:

app.use('/search', require('./searchRouter')(router)); 
    app.use('/user', require('./user')(router,io,mongoose,app,express)); 
    app.use('/shop', require('./shop')(router,io,mongoose,app,express)); 

Sie alle haben eine Route wie:

router.route('/') 
.get(function(req, res) { 
     res.send('routerRestuarant'); 
    }) 

.post(function(req, res) { 
    res.send('routerRestuarant'); 
}) 

.put(function(req,res){ 
    res.json({ 
     msg:"new shop.js router" 
    }) 
}); 

Problem:

Wenn ich eine Anfrage an Route ‚/ shop‘ senden, fand ich die Antwort von ‚/ search‘ kommen und keine Antwort von ‚/ shop‘ kommen, wie man es beheben?

Über passieren die Mungo, App, Express- Variablen

Ein Teil meines Codes ist unten:

Index.js:

var express = require('express'); 
//var router = express.Router({ mergeParams: true }); 
var router = express.Router(); 
var routeInit = function (app,io,mongoose) { 
    //app.use('sessions', require('./sessions')(router)); 

    app.use('/test', require('./searchRouter')(router)); 
    app.use('/user', require('./user')(router,io,mongoose,app,express)); 
    app.use('/shop', require('./shop')(router,io,mongoose,app,express)); 
    return router; 
}; 

module.exports = routeInit; 

Shop.js:

var routeShop = function (router,io,mongoose,app,express) { 
var Shop = require('../models/Shop')(mongoose); 

router.route('/createDish') 
    .post(function(req, res) { 
     var dish = req.param('dish', null); 
     var shopName = req.param('shopName', null); 
     for (var i = 0; i < dish.length; i++) { 
      Shop.addDish(shopName, dish[i], function(err) { 
       if (null == err) 
        res.json({ 
         code: 200 
        }); 
      }) 
     } 
    }) 
    return router; 
}; 

module.exports = routeShop; 

In Shop.js brauche ich die Variable Mungo, um die Mong init oose Schema, wenn ich nicht die Variable Mungo hier passieren werde, die complier Fehler ist:

/Users/Documents/Dropbox/MScCS/fos/app/routes/shop.js:8 
var Shop = require('../models/Shop')(mongoose); 
            ^

ReferenceError: mongoose is not defined 
    at routeShop (/Users/liyan/Documents/Dropbox/MScCS/fos/food-ordering-by-zwy-liyan/food-ordering/app/routes/shop.js:8:38) 
+1

Sie müssen die Variablen 'mongoose, app, express' nicht an andere Module übergeben. Node.js speichert die geladenen Module zwischen, und Sie können immer wieder darauf verweisen, ohne dass Sie sie übergeben müssen. –

+0

Ich habe Code im Zusammenhang mit Mungo, App etc, Wenn ich sie nicht bestehen, werde ich complier Fehler erhalten –

+1

Sie können nicht Compilerfehler haben, es interpretiert. @MukeshSharma hat Recht, Sie müssen nicht Express, App, Mungo passieren - sie sind zwischengespeichert und verfügbar als var mongoose = erfordern ('mongoose'); * Bitte beachten Sie, dass, wenn Sie die Verbindung mit Mungo gemacht haben - es hält die Verbindung in anderen Dateien, wo Sie Mungo benötigen. – num8er

Antwort

3

auf diese Weise versuchen:

in server.js:

// defining components to be accessible from route handlers 
app.use(function(req, res, next) { 
    req.components = { 
    io: io, 
    mongo: mongoose 
    }; 
    next(); 
}); 

app.use(require('./app/routes/index')); 

in index.js:

var 
    express = require('express'), 
    router = express.Router(); 

router.use('/search', require('./searchRouter')); 
router.use('/user', require('./user')); 
router.use('/shop', require('./shop')); 

module.exports = router; 

in Router-Dateien:

var 
    express = require('express'), 
    router = express.Router(); 

router.get('/', function(req, res) { 
    req.components.io.emit('message', {data: "I'm in restaurant"}); 
    res.send('routerRestuarant'); 
}); 

router.post('/', function(req, res) { 
    res.send('routerRestuarant'); 
}) 

router.put('/', function(req,res){ 
    res.json({ 
    msg:"new shop.js router" 
    }); 
}); 

module.exports = router; 
+1

Ich folge Ihren Anweisungen, aber einen Fehler im Index. js: werfen neuen Fehler (msg); ^ Fehler: Router.use() erfordert Callback-Funktionen, aber ein [Objekt Objekt] die Fehlerzeile ist: router.use ('/ search', require ('./searchRouter ')); –

+0

Ich gab Ihnen einen Teil des Codes, verwenden Sie module.export, wo es notwendig ist.Du bist neu, aber nicht Kind, ich will deine Hand nicht nehmen und spazieren gehen durch NodeJS – num8er

+0

ja, ich folge deinem Code richtig, kein komplier Fehler jetzt, aber jetzt haben die Server keine Antwort, ich werde es versuchen um es herauszufinden. Danke –

Verwandte Themen