首页 > 解决方案 > 如何在 NodeJS & ExpressJS 中实现页面控制系统?

问题描述

我对 node- 和 expressJS 完全陌生。我一直在尝试使用nodeand设置网站expressjs。制作服务器显然不是火箭科学,所以已经完成了,但目前我正试图了解如何实现页面控制器,就像我在PHP.

(在 PHP 中)通常,我创建一个文件夹,其中包含当参数请求特定页面时应该在主容器中显示的所有页面,/?page=两个不同的变量被更改,title并且page.

<?php
    require('connect.php');

    $pages = array(
        "home" => array("title" => "Home", "fontIcon" => "fas fa-home"),
        "accounts" => array("title" => "Accounts", "fontIcon" => "fas fa-key"),
        "players" => array("title" => "Players", "fontIcon" => "fas fa-users"),
        "posts" => array("title" => "Posts", "fontIcon" => "fas fa-newspaper"),
        "polls" => array("title" => "Polls", "fontIcon" => "fas fa-poll"),
        "shop" => array("title" => "Shop Items", "fontIcon" => "fas fa-shopping-cart"),
        "bans" => array("title" => "Banishments", "fontIcon" => "fas fa-user-slash")
    );

    // Check if (/?p=) parameter is set
    if(!isset($_REQUEST['p'])){
        $page = "home";
        $title = $pages["home"];
    } else {

        // See if requested page exists
        if(array_key_exists($_REQUEST['p'], $pages)){

            // iterate over pages array
            foreach ($pages as $p => $t) {

                // set page and title
                if($_REQUEST['p'] === $p){
                    $page = $p;
                    $title = $t;
                }
            }

        // use default page & title if requested page doesnt exist in array
        } else {
            $page = "home";
            $title = $pages["home"];
        }
    }

    // set path for requested page
    $page = "pages/".$page.".php";

?>

然而,在 expressJS 教程中,我无法找到这样的代码来完成我上面描述的内容。作者只展示了简单的示例,例如下面的代码,这似乎不是控制页面的有效方法。

app.get('/', function(req, res){
    // ... bla bla
});

app.get('/contact', function(req, res){
    // ... bla bla
});

app.get('/about', function(req, res){
    // ... bla bla
});

所以基本上我试图在 node&expressJS 中实现类似以下结构的东西:

将实现页面控制器的主页和可显示页面将存储在不同的目录中,每个页面将由 url 请求唯一访问。

_NodeExressAPP_
|
|__ pages/__page__.ejs
|
|__ backend/__page__.js
|
|__ views / index.ejs (main page)
|
|__ pageController.js
|
|_ server.js (include pageController)

似乎 express/node 不允许我像 php 那样组合文件,因此我认为一个人被迫为每个视图创建单独的、单独的 html 文档......这是最困扰我的。我不想重新创建整个 html 文档或将其复制粘贴到新文件中以获得另一个视图。我希望它将请求的页面组合到 index.ejs (根文件)中

标签: node.jsexpress

解决方案


据我了解,基本上您是在尝试在 node 和 express 中设置路由系统。Express 提供了一个非常高效的路由系统。可以通过多种方式快速管理路线。我将写一个小例子,它可以帮助你入门。此外,您可以使用快速生成器,它会立即为创建者构建一个基本项目。

    //Server.js file
    const express = require('express');
    let app = express();

    // Define a separate file for your route 
    // Define a folder , the folder may contain files for various concerns 
    let router = require('./controller/location_routes');

    // The application have access to all the routes defined in locatin_routes.js file
    app.use(router);


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


    // Location_routes.js file inside controller folder
    // Create a controller folder in root and add new file named (location_routes.js)
    const express = require('express');

    const router = express.Router();

    router.get('/location', (req, res ,next) => {

    console.log('I am Location route');
    res.send('Get locations');
    });


    router.post('/location', (req, res ,next) => {

    console.log('I am Add location route');
    res.send('Location Added');
   });

   module.exports = router;

推荐阅读