如何在NodeJS和ExpressJS中实现页面控制系统?

时间:2018-12-18 19:17:58

标签: node.js express

我对node-和expressJS完全陌生。 我一直在尝试使用nodeexpressjs建立一个网站。制造服务器显然不是火箭科学,所以做到了 但是目前,我正在尝试了解如何实现页面控制器,就像在PHP中一样。

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

<?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(根文件)

1 个答案:

答案 0 :(得分:0)

据我了解,基本上,您正在尝试在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;