Node.js Express app.use ('/route' )遇到其他路线?

标签 node.js express

在我的应用程序中,我有 3 条路线

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

我在 server.js 中的单独文件中编写路由(该文件在终端中运行):

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

在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));

他们都有这样的路线:

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

问题:

当我发送请求到路由“/shop”时,我发现响应来自“/search”,而没有响应来自“/shop”,如何解决这个问题?

关于传递mongoose,app,express变量

我的代码的一部分如下:

索引.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;

在Shop.js中,我需要变量mongoose来初始化mongoose模式,如果我没有在这里传递变量mongoose,编译器错误是:

/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)

最佳答案

试试这个方法:

在 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'));

在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; 

在路由器文件中:

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; 

关于Node.js Express app.use ('/route' )遇到其他路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37455602/

相关文章:

node.js - 将 Node.js 应用程序作为后台进程启动

node.js - 如何使用 gcloud 计算 Node js 客户端分配服务帐户?

javascript - 随叫随到执行 MySQL 操作 - Node.js

node.js - 显示 'db.get is not a function' NodeJs、MongoDB

javascript - 如何使用 NodeJs Express 在 Handlebars 中以 JSON 格式显示数组内的对象

javascript - 环回。如何获得一个用户的所有角色?

mysql - 使用 Sequelize 的 Express JS 需要更多时间来执行查询

javascript - 在 Javascript 中扩展对象数组

node.js - Typescript Node.js 应用程序中的 guid/uuid

node.js - 语音转文本 : Piping microphone stream to Watson STT with NodeJS