2017-01-14 1 views
1

У меня есть настройка маршрутов для пользователя в нижнем коде, я хочу использовать экспресс-промежуточное и пробные маршруты, используя app.use.Как использовать экспресс-промежуточное программное обеспечение для обработки всех маршрутов?

index.js является вызовом метода контроллера пользователя после API, вызывается Так ниже кода я пытаюсь опубликовать данные api/users от клиента, но он возвращает 404.

Как я могу решить эту проблему с помощью ниже настройки маршрутов?

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; 

приложение> 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'')); 
     }); 

    }; 

конфигурация> 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()); 
} 

индекса пользователя, где я буду обрабатывать все операции Crud для пользователя

приложение> апи> пользователя> 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

Вероятно, вы должны указать '/ API/пользователей ', а не' api/users'. – jfriend00

+0

Попытайтесь не задавать повторяющийся вопрос: http://stackoverflow.com/questions/41644624 – TGrif

ответ

0

первый:

Чтобы справиться запрос

Bind на уровне приложений промежуточного слоя к экземпляру объекта приложения, используя app.use() и app.METHOD(), где METHOD - это метод HTTP запроса, который выполняет функция промежуточного программного обеспечения (например, GET, PUT или POST) в нижнем регистре.

В этом примере показана функция промежуточного программного обеспечения без пути монтирования. Функция выполняется каждый раз, когда приложение получает запрос.

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) использовать вышеуказанную функцию вместо этого

Но эту функцию в конце, так что будет только тогда, когда преобразования приложений нет пути маршрута не найдено на объект приложения. Express documentation

второй:

Для обработки CreateUser

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 работает пример с некоторыми пояснениями

Ваш app.js файл

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") 
}) 

пользователь.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; 

Ваш app.use будет app.use(api/user) в то время как пользователь будет router.get(/api/user) так, когда и попытаться http://127.0.0.1:8080/api/user ваш ответ будет respond for ..../api/user

+0

Я не мог понять, что вы реализовали в ответ, это сбивает меня с толку, потому что вы назвали имена файлов разными. – hussain

+0

второй - это просто для вашего понимания копия, которая вставляет его и запускается в вашей среде для большего понимания – Adiii

+0

, поэтому вы говорите, что первый ответ - это мой код? – hussain

 Смежные вопросы

  • Нет связанных вопросов^_^