如何使用快速中间件来处理所有路由?

时间:2017-01-14 21:53:47

标签: javascript node.js express mongoose

我有问题在下面的代码中为用户设置路由,我想使用快速中间件并使用app.use尝试路由。

一旦api被调用,

index.js正在调用用户控制器方法所以在下面的代码中我试图从客户端发布数据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;

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());
}

用户索引,我将处理用户的所有crud操作

app> api>用户> 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;

1 个答案:

答案 0 :(得分:0)

<强>第一

处理所有请求

使用 app.use()和app.METHOD()函数将应用程序级中间件绑定到 app对象的实例,其中METHOD是中间件函数以小写处理(例如GET,PUT或POST)的请求的HTTP方法。

此示例显示没有装载路径的中间件功能。每次 应用程序收到请求时都会执行此功能

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)使用上述函数代替此

但是这个函数最后只有在没有找到app对象的路径时才会执行。 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;

使用一些解释更新工作示例

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

<强> user.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