2017-01-14 3 views
1

Ich habe Problem beim Einrichten von Routen für Benutzer in unter Code, ich möchte Express-Middleware und versuchen Routen mit app.use.Wie Express-Middleware verwenden, um alle Routen zu behandeln?

index.js aufruft Methode Benutzer-Controller einmal api So in folgenden Code aufgerufen wird i Daten api/users von Client zu schreiben versuche, aber es gibt 404.

Wie kann ich dieses Problem beheben unter Routen-Setup mit?

server.js

var express  = require('express'); 
var app   = express(); 
var bodyParser  = require('body-parser'); 
var methodOverride = require('method-override'); 
var mongoose = require('mongoose'); 
console.log(mongoose.connection.readyState); 
var db = require('./config/db'); 
var port = process.env.PORT || 8080; 
mongoose.connect(db.url); 
app.use(methodOverride('X-HTTP-Method-Override')); 
app.use(express.static(__dirname + '/public')); 

require('./app/routes')(app); // configure our routes 
require('./config/express')(app); 
app.listen(port);         
console.log('listening on port ' + port);   
exports = module.exports = app; 

app> routes.js

module.exports = function(app) { 


     app.use('api/users', require('./api/user')); 
     app.get('*', function(req, res) { 
      res.sendfile('./public/views/index.html'); // load our public/index.html file 
      // res.sendFile(path.join(__dirname, ''../public/views/index.html'')); 
     }); 

    }; 

config> Express.js

var express = require('express'); 
var morgan = require('morgan'); 
var bodyParser = require('body-parser'); 
// import cookieParser from 'cookie-parser'; 
// import errorHandler from 'errorhandler'; 
var path = require('path'); 
// import lusca from 'lusca'; 
var config = require('./db'); 
var mongoose = require('mongoose'); 
//var mongoStore = connectMongo(session); 

module.exports = function(app) { 
// app.engine('html', require('ejs').renderFile); 
    app.set('view engine', 'html'); 
    app.use(bodyParser.urlencoded({ extended: false })); 
    app.use(bodyParser.json()); 
    app.use(methodOverride()); 
} 

Benutzerindex, wo ich alle crud Betrieb für Benutzer behandelt

app> api> Benutzer> index.js

var express = require('express'); 
var controller = require('./user.controller'); 

var router = express.Router(); 

router.get('/', controller.index); 
router.post('/',controller.create); 

module.exports = router; 
+0

Wahrscheinlich sollten Sie spezifizieren werden '/ api/users ', nicht' api/Benutzer'. – jfriend00

+0

Versuchen Sie nicht, doppelte Frage zu stellen: http://StackOverflow.com/Questions/41644624 – TGrif

Antwort

0

1. Platz:

Um alle Anfragen zu behandeln

Bind Application-Level-Middleware auf eine Instanz des App Objekt durch die Verwendung von app.use() und app.METHOD() - Funktionen, wobei METHOD die HTTP-Methode der Anforderung ist, die die Middleware-Funktion verarbeitet (z. B. GET, PUT oder POST) in Kleinbuchstaben.

Dieses Beispiel zeigt eine Middleware-Funktion ohne Mount-Pfad. Die Funktion wird jedes Mal ausgeführt, wenn die App eine Anforderung empfängt.

app.use(function(req,res) 
    { 

     res.sendfile('./public/views/index.html'); 
     console.log("Not found....I will handle *unhandle* rout here for you"); 
}) 

// app.get('*', function(req, res) verwenden, um die obige Funktion anstelle diesen

Aber diese Funktion am Ende, so dass es nur wird excute, wenn keine Route Pfad zum App-Objekt gefunden. Express documentation

2.:

Um mit einer Erklärung Arbeitsbeispiel

Ihre app.js Datei

var express=require('express') 
var app=express() 
app.use('api/user',require('./user')) 
app.use('/',require('./user')) 
app.use(function(req,res) 
     { 
    res.sendfile('stack10.html') 
    console.log("Not found....I will handle *unhandle* rout here for you"); 
}) 
app.listen(8080,function() 

      { 
    console.log("server listening on port 8080") 
}) 
AngelegtVon

var express = require('express'); 
var controller = require('./user.controller'); 

var router = express.Router(); 
// you must define route which you want to handle in user file 
router.get('/api/user', controller.index); 

router.post('/',controller.create); 

module.exports = router; 

Update-Griff

Benutzer.js

var express = require('express') 
var router = express.Router() 
var app=express() 
router.get('/api/user', function(req, res) { 
    res.send('respond for ..../api/user') 
}); 
router.get('/',function (req,res) { 
    res.send('respose for ..../') 
}) 
module.exports = router; 

Dein app.use app.use(api/user) sein, während in Benutzer router.get(/api/user) so sein wird, wenn u http://127.0.0.1:8080/api/user versuchen Ihre Antwort respond for ..../api/user sein

+0

Ich konnte nicht verstehen, was Sie in Antwort implementiert haben, es verwirrt mich, weil Sie Dateinamen unterschiedlich erwähnt. – hussain

+0

zweite ist nur für Ihr Verständnis zu kopieren, fügen Sie es und führen Sie in Ihrer Umgebung für mehr Verständnis – Adiii

+0

so sagen Sie zuerst ist die Antwort nach meinem Code? – hussain

Verwandte Themen