【问题标题】:How to link routes with controllers in node js?如何将路由与节点 js 中的控制器链接?
【发布时间】:2019-12-29 19:19:32
【问题描述】:

我有一些用 server.js 编写的 API。我想制作 MVC 结构,就像我想在路由目录中拥有所有路由,在控制器中拥有 API。我如何用 koa 和 nodejs 制作这个结构。我是nodejs的新手。我尝试做某事,但它不起作用。如何将所有这些与 server.js 链接起来。这样当我启动服务器 API 时应该可以工作。希望你能理解我的问题。我尝试了很多东西,但都不适合我。

控制器:apiController.js

const Router = require('koa-router');
const router = new Router();
const Koa = require('koa');
const app = new Koa();
var bodyParser = require('koa-bodyparser');


app.use(bodyParser({
    formidable: {uploadDir: './uploads'},
    multipart: true,
    urlencoded: false
}));

router.get('/api/get_all_users', async (ctx) => {
    const {rows} = await ctx.app.pool.query('SELECT * from users');
    ctx.body = {
        status: 200,
        message: "Data Found",
        data: rows,
    };
});

app.use(router.routes()).use(router.allowedMethods());

路由:api.js

const Router = require('koa-router');
const router = new Router();
const apiController = require('../controllers/ApiController');


router.get("/api/get_all_users", apiController);

服务器.js

const Koa = require('koa');
const app = new Koa();
const {Pool} = require('pg');


app.pool = new Pool({
    user: 'postgres',
    host: 'localhost',
    database: 'my_db',
    password: 'my_pass',
    port: 5432,
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});



【问题讨论】:

    标签: javascript node.js model-view-controller koa koa2


    【解决方案1】:

    现场演示: Node Server

    server.js

        const Koa = require('koa');
        const app = new Koa();
        const {Pool} = require('pg');
    
    
        app.pool = new Pool({
            user: 'postgres',
            host: 'localhost',
            database: 'my_db',
            password: 'my_pass',
            port: 5432,
        });
    
        // initialize user management module
        require('./modules/user-management/routes')(app)
    
        app.listen(3000, () => {
            console.log('Server running on port 3000');
        });
    

    接下来,创建文件夹模块和子文件夹,如下所示:

    • 用户管理
      • 路线
        • router.js
        • user.js
      • 控制器
        • user.js
      • 型号
        • user.js

    modules->user-management->routes->router.js

    路由器.js

    module.exports = (app) => {
        // user-routes api file.
        require("./user")(app);
    };
    

    modules->user-management->routes->user.js

    var UserControl = require("../controller/user");
    
    module.exports = function (app) {
        const endpoint = "api";
    
        app.post(endpoint+"get_all_users",UserControl.getAllUsers);
    
    };
    

    modules->user-management->controller->user.js

    var userControl = {
    
        getAllUser: async (req, res) => {
            try {
                // get functionality here..
                let users=[{'uid':1,'uname':'rahul'}]
                res.status(200).json(users);
            } catch (err) {
                res.status(500).json(err);
            }
        }
    }
    module.exports = userControl;
    

    【讨论】:

    • 得到 500 错误,因为 require 在 server.js 文件中不起作用并且没有指向路由。
    • 你能编辑我的代码吗?这样我可以更好地理解。
    • 只需要改变 require('./modules/user-management/routes')(app) 而不是 require('/modules/user-management/routes')(app)
    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多