在这篇文章中,您将学习一种在node中实现RESTful的简单方法,首先为account添加一个新控制器,获取可用帐户列表,更新帐户,最后获取帐户。

已经有一些库这样做了。我不打算替换它,只是制作一些疯狂的代码。如果我们将来需要一些技巧来解决我们的问题,希望这可以帮助我们。

在GitHub - techcoaching/node_controller查看来自github的代码。

在可视化代码中打开这个,我们可以看到:

就几个文件,让我解释一下:

  • 公共文件夹:这是公共代码、功能所在的位置。
  • main.ts:这是启动文件。
  • 控制器文件夹:这是您的应用程序控制器在.NET WebAPI项目中的位置。有两个示例控制器,如果需要,您可以查看它们以获得更多理解。
  • main.ts,有一个特别的技巧,只是新建一个应用程序类型的节点(使用express),注册路由并启动,就这么简单吧:
let option:ICreateApplicationArg=<ICreateApplicationArg>{type:ApplicationType.NODE_EXPRESS
};let routeConfigs:Hashtable<IRouteConfig>=BaseController.getRouteConfigs(CONTROLLERS);
let app:IApplication=ApplicationFactory.create(option);
app.configRoutes(routeConfigs);
app.start();

运行“npm install”,这将从npm下载必要的包。

运行“npm run start”,这将启动代码并在3001端口侦听请求。您可以在common\application\nodeApplication.ts更改此设置,您可以改进应用程序以从外部文件加载这些设置。这超出了本文的范围:

让我们使用任何rest客户端并向http://localhost:3001发送一些请求,如下所示,只是想确保我们有正确的设置:

问好:

带参数调用:

发布数据:

请查看testCotroller和usercontroller了解更多信息。

好的,我们可以启动代码,并通过API调用制造一些噪音。让我们继续创建一个新的控制器。

让我们看看用例:

我想拥有允许我能够:

  • 获取可用帐户列表
  • 更新账户信息
  • 获取账户信息
  • 删除帐户
  • 添加新帐户。
    账户信息包括:

    • 帐户ID,guid值
    • 账户名
    • 状态:值可以是:正常、已删除

我们来分析一下:

  • 获取账户列表,我们需要:

    • 获取请求
    • uri:<基本uri>/accounts
    • 返回:json中的帐户数组
  • 更新账户信息:
    • POST请求,我们使用POST用于create和update
    • uri:<base uri>/accounts/<account id>
    • body:json格式的账户
    • 返回:无
  • 获取账户信息:
    • GET 请求
    • uri:<base uri>/accounts/<account id>
    • 返回:账户信息
  • 删除帐户:
    • DELETE 请求
    • uri:<base uri>/accounts/<account id>
    • 返回:账号被删除
  • 添加新帐户:
    • POST 请求
    • uri: <base uri>/accounts
    • body:json格式的账户信息

让我们实现。

步骤 1:为帐户添加新控制器(命名为AccountController

import { UriPrefix } from "../common";
import { BaseController } from "../common/models/baseController";
@UriPrefix("/api/accounts")
export class AccountController extends BaseController{
}

并在控制器列表中注册此控制器:

import { TestController } from "./testController";
import { UserController } from "./userController";
import {AccountController} from "./Account/accountController";
export const CONTROLLERS:Array<any>=[TestController,UserController,AccountController
];

2步:获取可用帐户列表

添加新的AccountController.ts

import { Route, UriPrefix } from "../../common";
import guidHelper from "../../common/helpers/guidHelper";
import { BaseController } from "../../common/models/baseController";
import {Account} from "./account";
import {AccountService} from "./accountService";
@UriPrefix("/api/accounts")
export class AccountController extends BaseController{constructor(){super()if(!AccountService.accounts || AccountService.accounts.length==0){AccountService.accounts=[<Account>{id:guidHelper.create(), name:"Account 1", status: "normal"},<Account>{id:guidHelper.create(), name:"Account 2", status: "deleted"},];}}@Route("")public getAccounts():Array<Account>{return AccountService.accounts;}
}

在第5行和第7行,这将创建映射到的最终uri getAccounts,即“/ap/accounts”。只需简单地返回内存列表的列表。

和Account模型:

export class Account{public id:string;public name:string;public status:string;
}

和AccountService:

import { Account } from "./account";export class AccountService{public static accounts:Array<Account>=[];
}

目前它相当简单,我们拥有的文件夹结构:

只需添加一个名为“account”的新文件夹,并将account所有代码移动到此文件夹中。

让我们再次运行代码,向“/api/accounts”发送请求,我们现在有两个帐户的列表:

现在,我们完成了第一个任务,即“获取可用帐户列表”,有关更多信息,请参阅“feature/get_accounts”中的代码。

3 步:更新帐户

它与“get accounts”任务大致相同。添加处理update请求的新方法:

@Route(":id")@HttpPost()public updateAccount(id:string, name:string, status:string):string{let result:string=AccountService.updateAccount(id, name, status);return result;}

有一些注意事项:

  • 在第 1 行,我们注册id作为参数接收的路由。
  • 在第 2 行,它处理post对上述uri的请求。
  • 在第 3 行,将自动为我们注入参数。name和status来自请求的正文。

请不要关注方法体的逻辑。它超出了范围。

对于其余的代码,您可以从“feature/update_account”分支检出。

让我们更新一个帐户:

获取帐户列表,更新了分配的帐户:

4 步:获取帐户

添加处理get请求的getAccount方法:

@Route(":id")@HttpGet()public getAccount(id:string):any{return AccountService.getAccount(id);}

添加新帐号和删除帐号,请继续自行操作,有一些提示:

  • 添加新HttpDelete的用于处理delete帐户,类似于HttpPost。
  • 您可以使用HttpPost添加新帐户。

https://www.codeproject.com/Articles/5308554/WebAPI-and-Node

WebAPI和Node相关推荐

  1. [AaronYang]C#人爱学不学[1]

    当前编写时间:2014年12月24日21:11:14   编写人:杨洋(Aaronyang) 新文章:[AaronYang]C#人爱学不学[1] 声明:->可以理解为 联想到,或者关联的意思. ...

  2. asp.net webapi 序列化为xml 时实体属性增加![CDATA[]]防止特殊字符

    有时webapi在序列化xml时,可能需要给某些带有html或特殊字符(如 < > & /)的字段加上<![CDATA[]]> 已防止影响xml正常数据,如果使用.as ...

  3. android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧

    可以使用AlexaLambda函数或RESTAPI端点开发Alexa技能.Lambda函数是Amazon实现AWS中提供的无服务器功能.Amazon建议使用Lambda函数,尽管它们不容易调试.虽然您 ...

  4. 查看node状态_第六章 无限可能,神器降临——Node-RED

    导读:隆重推出Node-RED,可视化编程神器. 既然是人工智能,人自然是主导,然而面对一行又一行的代码,学习成本却非常高昂,不是金钱,是时间.所以近年来越来越多的可视化编程就成了救世主,在很大程度上 ...

  5. 【开源】NodeJS仿WebApi路由

    用过WebApi或Asp.net MVC的都知道微软的路由设计得非常好,十分方便,也十分灵活.虽然个人看来是有的太灵活了,team内的不同开发很容易使用不同的路由方式而显得有点混乱. 不过这不是重点, ...

  6. webapi文档描述-swagger

    最近做的项目使用mvc+webapi,采取前后端分离的方式,后台提供API接口给前端开发人员.这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word文档方式进行交流 ...

  7. dotNet 5 中执行 Node.js

    在低代码产品中为了扩展功能,我们在业务编排中会扩展代码块的功能,允许用户直接在界面中进行代码(Node.js. Python)的编写,来实现取数或者赋值的一些功能.本文简单介绍下在 dotNET 5 ...

  8. 整合.NET WebAPI和 Vuejs——在.NET单体应用中使用 Vuejs 和 ElementUI

    .NET简介 .NET 是一种用于构建多种应用的免费开源开发平台,例如: Web 应用.Web API 和微服务 云中的无服务器函数 云原生应用 移动应用 桌面应用 1). Windows WPF 2 ...

  9. 【源码解读】Vue与ASP.NET Core WebAPI的集成

    在前面博文[Vue]Vue 与 ASP.NET Core WebAPI 的集成中,介绍了集成原理:在中间件管道中注册SPA终端中间件,整个注册过程中,终端中间件会调用node,执行npm start命 ...

最新文章

  1. 开发者AI职业指南:CSDN《AI技术人才成长路线图V1.0》重磅发布
  2. 转:mybatis - 分页功能
  3. 洛谷P1730最小密度路径
  4. 每日程序C语言15-猴子吃桃问题
  5. 谁占用了我的Buffer Pool
  6. mysql5.5.44安装_cmake 安装 mysql5.5.44
  7. pytorch 变对角矩阵_Pytorch-Tensor基本操作
  8. matlab画线不同颜色_怎样画线框图才有意义?
  9. php 系统模版_原生 PHP 模板系统:Plates
  10. 【英语学习】【Daily English】U04 Neighborhood L02 Would you mind if I used your ladder for a second?
  11. android 定时器 耗电,Android定时器
  12. codeblocks 编译java_在CodeBlocks中发布编译程序
  13. MySQL(基础知识)
  14. Win虚拟机查询不到自己的IP地址
  15. .net之PDF合并(直接拼接,不改变尺寸和样式)
  16. 科学研究设计五:实验设计
  17. w7计算机的工具栏爱那里,win7系统底下任务栏不见了的解决方法
  18. php+mysql+H5砸金蛋、九宫格、翻翻乐、扭蛋机,开盲盒抽奖程序模板
  19. 使用nginx反向代理配置动态域名
  20. Miktex 修改经验

热门文章

  1. python粒子风暴代码_turtle爆炸粒子效果源码
  2. 经典水墨素材点缀中国风海报|简约国际范
  3. UI实用素材|播放器界面模板
  4. 后台UI专辑模板有这些就够了!
  5. multiprocessing python_一行 Python 代码实现并行
  6. QT widget窗体设置主次
  7. 解析tid数据并绘制折线图(python)
  8. zookeeper集群启动的时候有一个别没有启动成功,出现Error contacting service. It is probably not running解决方法
  9. SpringMVC 的总结
  10. Understanding glibc malloc - ptmalloc