简体   繁体   English

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

[英]How to use express middleware to handle all routes?

I have issue setting up routes for user in below code, I want to use express middleware and trying routes using app.use . 我有问题在下面的代码中为用户设置路由,我想使用快速中间件和使用app.use尝试路由。

index.js is invoking user controller method once api's is being called So in below code i am trying to post data api/users from client but it returns 404. 一旦api被调用, index.js正在调用用户控制器方法所以在下面的代码中我试图从客户端发布数据api/users但它返回404。

How can i fix this issue using below routes setup ? 如何使用以下路线设置解决此问题?

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

User index where i will handle all crud operation for user 用户索引,我将处理用户的所有crud操作

app > api > user > index.js app> api> user> 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;

1st: 第一名:

To handle all request 处理所有请求

Bind application-level middleware to an instance of the app object by using the app.use() and app.METHOD() functions, where METHOD is the HTTP method of the request that the middleware function handles (such as GET, PUT, or POST) in lowercase . 使用app.use()和app.METHOD()函数将应用程序级中间件绑定到app对象的实例,其中METHOD是中间件函数处理的请求的HTTP方法(例如GET,PUT或POST)小写

This example shows a middleware function with no mount path. 此示例显示了没有装载路径的中间件功能。 The function is executed every time the app receives a request . 每次应用程序收到请求时都会执行该功能。

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) use the above function instead of this // app.get('*', function(req, res)使用上面的函数而不是这个

But this function at the end so it will only excute when no route path found to the app object. 但是这个函数最后只有在找不到app对象的路径时才会执行。 Express documentation 快速文档

2nd: 第二:

To handle createuser 处理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 working example with some explanation 通过一些解释更新工作示例

Your app.js file 你的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 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;

Your app.use will be app.use(api/user) while in user will be router.get(/api/user) so when u try http://127.0.0.1:8080/api/user your response will be respond for ..../api/user 你的app.use将是app.use(api/user)而在用户中将是router.get(/api/user)所以当你尝试http://127.0.0.1:8080/api/user时你的回复会respond for ..../api/user

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM