【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--控制器的声明定义和发现篇(3/8)

简介: 文章目录前情概要前面文章把路由已经介绍的差不多了,包括url映射,路由选择等。接下来讲一讲controller的一些基本规则BaseController的所有代码都在这里拉。相当简单。主要逻辑:我们的组件接到请求后,根据url规则找到对应的controller和要处理的请求的action后,直接new一个controller出来,把req,res等对象传递给controller对象。

文章目录

前情概要

前面文章把路由已经介绍的差不多了,包括url映射,路由选择等。接下来讲一讲controller的一些基本规则

BaseController的所有代码都在这里拉。相当简单。
主要逻辑:我们的组件接到请求后,根据url规则找到对应的controller和要处理的请求的action后,直接new一个controller出来,把req,res等对象传递给controller对象。并对action进行invoke(call、applay)。

basecontroller的全部代码

import { UserInfo } from './UserInfo';
import { ViewResult } from './ViewResult';
import * as core from "express-serve-static-core";
export class BaseController {
    constructor(request: core.Request, response: core.Response) {
        this.request = request;
        this.response = response;
        var _req: any = this.request;
        this.UserInfo = _req.UserInfo;
    }
    /**
     * 当前请求的request对象
     * 
     * @type {core.Request}
     * @memberof BaseController
     */
    public request: core.Request;
    /**
     * 当前请求的response对象
     * 
     * @type {core.Response}
     * @memberof BaseController
     */
    public response: core.Response;
    /**
     * 当前登录的用户
     * 
     * @type {UserInfo}
     * @memberof BaseController
     */
    public UserInfo: UserInfo;

    /**
     * 返回view由视图引擎在服务端进行渲染
     * 
     * @param {string} viewName 当前视图的名称
     * @param {*} [viewData] 需要传递给视图的数据
     * @returns {ViewResult} 
     * @memberof BaseController
     */
    public view(viewName: string, viewData?: any): ViewResult {
        return new ViewResult(viewName, viewData)
    }
}

所以basecontroller的结构非常简单。只有
构造函数:注入req,res对象
几个属性:req,res,userinfo
几个方法:view 标记当前方法返回的是一个视图,需要在服务端进行渲染,非view返回值都视为直接返回给调用者。这边模仿asp.net mvc 提供比如json,content,file等类似方法也是可以的。目前就我们自己的需求来讲,也就2种,要么在服务端进行渲染,要么就是ajax请求。所以这里没有其他方法了。

具体项目中controller的声明和使用代码

import { Host, Site, OSType, HostEnv, Dictionary } from './../Entity';
import { BaseController, get, post, auth, actionName, ViewResult } from "gd-express-basic";
import { getMongoRepositoryAsync, FindManyOptions } from '../gd-mongo';

export class HostController extends BaseController {
    public async list() {
        var repo = await getMongoRepositoryAsync(Host);
        var b = await repo.FindAsync();
        return b
    }
    public async info() {
        var repo = await getMongoRepositoryAsync(Host);
        var b = await repo.FindAsync({ Ip: this.request.query.ip, HostEnv: this.request.query.env });
        return b
    }
    @get()
    public index() {
        return this.view("hostIndex");
        //return this.view("hostIndex", {服务端页面渲染需要用到的数据对象});
    }
    @get()
    public hostAdd() {
        return this.view("hostAdd", {});
    }
}

controller注册到RouteHandler

在controller文件夹下弄个index文件,把controller全部声明并导出。
img_bc45f1f43ebfe7701ab6aa735e9ad1ac.png
注册到RouteHandler

import { RequestHandler, RouteHandler } from 'gd-express-basic'
const _app = express();
RouteHandler(_app, controllers);

controller 和 action 的定义就到这里完事了,没啥需要特别说的。
PS:
其实这里也是可以做自动发现的。比如:RouteHandler(_app, controllers); --> RouteHandler(_app, {controllers:"./controller/*.js"}); 也是一个不错的方式。个人觉得controller还是不会太频繁的增加。所以暂时也就没做自动发现了(^_^)

目录
相关文章
|
7天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js: 打造高效后端服务
【10月更文挑战第39天】在数字化浪潮中,后端开发作为支撑现代Web应用的骨架,扮演着不可或缺的角色。Node.js,作为一种流行的服务器端JavaScript运行环境,因其非阻塞I/O和事件驱动的特性,被广泛应用于构建轻量且高效的后端服务。本文旨在通过浅显易懂的语言,结合生动的比喻和实际代码案例,带领读者深入理解Node.js的核心概念、架构设计及其在后端开发中的应用,进而掌握如何使用Node.js搭建稳定、可扩展的后端服务。无论你是初探后端开发的新手,还是寻求进阶的开发者,这篇文章都将为你提供有价值的指导和启示。
|
12天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
18天前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
10天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
15天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第31天】本文将引导你进入Node.js的奇妙世界,探索其如何革新后端开发。通过浅显易懂的语言和实际代码示例,我们将一起学习Node.js的核心概念、搭建开发环境,以及实现一个简单但完整的Web应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇通往高效后端开发的大门。
|
16天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第30天】本文将通过一个Node.js的简单示例,引导你进入Node.js的世界。我们将从基础概念讲起,然后一步步深入到代码实现,最后总结Node.js在后端开发中的优势和应用场景。无论你是前端开发者还是后端新手,这篇文章都将为你打开一扇了解Node.js的大门。
32 2
|
25天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
45 1
|
13天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
15天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
24 0
|
20天前
|
JavaScript 前端开发 安全
深入浅出Node.js后端开发
【10月更文挑战第26天】在这篇文章中,我们将一起探索Node.js的奇妙世界。不同于传统的Java或Python,Node.js以其异步非阻塞I/O和事件驱动的特性,在后端开发领域独树一帜。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和思考。从基础概念到实际应用,我们一步步深入Node.js的世界,让你了解其不仅仅是JavaScript运行环境那么简单。