【问题标题】:import modules in nodejs routes在 nodejs 路由中导入模块
【发布时间】:2018-11-08 16:10:25
【问题描述】:

我已经在 index.js 文件中声明了 socket.io,我会将 soket 对象传递给路由模块。

const express = require('express');
const app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var MongoClient = require('mongodb').MongoClient;
var server = require('http').Server(app);
var io = require('socket.io')(server);
var routes = require('./routes/routes')(io);

const dbb = mongoose.connect("mongodb://xxx:xxx@ds137600.mlab.com:37600/tasksdb");
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));

app.use('/', routes);
var server= app.listen(3000, function () {
    console.log('Example app listening on port 3000!')
})

routes.js

var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router

router
    .route("/tasks")
    .post(function (req, res, next) {
        ....
    });
router
    .route("/tasks")
    .get(function (req, res) {
        ....
    });
module.exports = router;

如何将其传输到 routes.js?有哪些不同的方法?我仍然不太了解模块的工作原理

【问题讨论】:

    标签: javascript node.js express socket.io node-modules


    【解决方案1】:

    对于服务器:

    const app = express();
    
    app.use(logger('tiny'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    app.use((req, res, next) => {
      const origin = req.headers.origin;
      if (allowed_header.indexOf(origin) > -1) {
        res.header('Access-Control-Allow-Origin', origin);
      }
      res.header(
        'Access-Control-Allow-Headers',
        'Origin, X-Requested-With, Content-Type, gutsyJwt, Accept'
      );
      next();
    });
    
    app.io = require('socket.io')({
      origins: ['*:*'],
    });
    
    require('./routes')(app);
    
    module.exports = app;
    

    然后在路线中:

    module.exports = app => {
      app.post('/api/bar', (req, res) =>
       fooController.bar(req, res, app.io)
      );
    };
    

    然后在控制器中:

    module.exports = {
      bar(req, res, io) {
        io.emit('message', req.body.message);
        res.status(200).send({msg: 'Message broadcasted!'});
      },
    };
    

    在这篇文章中,如果您需要更多参考,它也会提出类似的问题。 ExpressJS how do I pass objects with state (eg. connections)?

    【讨论】:

    • 如果你能解释更多代码(特别需要 ('./routes')(app); )那就太好了。
    • 路由文件不是必需的,有些人更喜欢将所有路由留在app文件夹中。对我来说,我喜欢他们之间的分离。那只是从路由文件夹中导入路由,并作为道具传入应用程序。我稍微修改了一下路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多