node代码如下(exptest.js):

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var patientinfo=require('./node_entity/patientinfo');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded app.get('/api/patientinfo',patientinfo.get);
app.post('/api/patientinfo',patientinfo.update);
app.put('/api/patientinfo',patientinfo.put);
app.delete('/api/patientinfo',patientinfo.delete); app.listen(3000);

patientinfo.js(位于node_entity目录下,可自定义)代码如下:

exports.get = function(req, res){  

  res.setHeader('Content-Type', 'application/json;charset=utf-8');
res.send('get patientinfo info ok');
console.log('遍历参数:');
for(var key in req.query)
console.log('%s = %s',key,req.query[key]);
console.log('patientinfo get ok!');
}; exports.delete = function(req, res){
res.setHeader('Content-Type', 'application/json;charset=utf-8'); res.send({status:"success", message:"delete patientinfo success"});
console.log('遍历参数:');
for(var key in req.body)
console.log('%s = %s',key,req.body[key]);
console.log('patientinfo delete ok!');
}; exports.update = function(req, res){
res.setHeader('Content-Type', 'application/json;charset=utf-8'); res.send({status:"success", message:"update patientinfo success"});
console.log('遍历参数:');
for(var key in req.body)
console.log('%s = %s',key,req.body[key]);
console.log('patientinfo update ok!');
}; exports.put = function(req, res){
res.setHeader('Content-Type', 'application/json;charset=utf-8');
console.log(req.body); res.send({status:"success", message:"add patientinfo success"});
console.log('遍历参数:');
for(var key in req.body)
console.log('%s = %s',key,req.body[key]);
console.log('patientinfo put OK!');
};

通过C#编写一个winform程序,代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} enum Method
{
POST,
GET,
PUT,
DELETE
}
private string MyWebRequest(string webUrl,Method method, IDictionary<string, string> parameters, Encoding dataEncode)
{
string ret = string.Empty;
try
{
string paramData = "";
if (!(parameters == null || parameters.Count == ))
{
StringBuilder buffer = new StringBuilder();
int i = ;
foreach (string key in parameters.Keys)
{
if (i > )
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
} paramData = buffer.ToString();
}
if (method == Method.GET)
{
webUrl += "?" + paramData;
} HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(webUrl));
webReq.Method = method.ToString();
webReq.ContentType = "application/x-www-form-urlencoded";
//webReq.ContentType = "text/html";
if (method != Method.GET)
{
byte[] byteArray = dataEncode.GetBytes(paramData); //转化
webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, , byteArray.Length);//写入参数
newStream.Close();
}
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
ret = sr.ReadToEnd();
// ret = HttpUtility.UrlDecode(ret);
sr.Close();
response.Close(); }
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ret;
}
private void button2_Click(object sender, EventArgs e)
{
Dictionary<string, string> param = new Dictionary<string, string>();
param["Function"] = "StudioList";
param["UserJID"] = "windows01@win-nq66026cp12";
string ret = MyWebRequest("http://127.0.0.1:3000/api/patientinfo", Method.POST, param, Encoding.UTF8); MessageBox.Show(ret);
}
private void button3_Click(object sender, EventArgs e)
{
Dictionary<string, string> param = new Dictionary<string, string>();
param["Function"] = "StudioList";
param["UserJID"] = "windows01@win-nq66026cp12";
string ret = MyWebRequest("http://127.0.0.1:3000/api/patientinfo",Method.DELETE, param, Encoding.UTF8); MessageBox.Show(ret);
} private void button4_Click(object sender, EventArgs e)
{
Dictionary<string, string> param = new Dictionary<string, string>();
param["Function"] = "StudioList";
param["UserJID"] = "windows01@win-nq66026cp12";
string ret = MyWebRequest("http://127.0.0.1:3000/api/patientinfo",Method.PUT, param, Encoding.UTF8); MessageBox.Show(ret);
} private void button5_Click(object sender, EventArgs e)
{
Dictionary<string, string> param = new Dictionary<string, string>();
param["Function"] = "StudioList";
param["UserJID"] = "windows01@win-nq66026cp12";
string ret = MyWebRequest("http://127.0.0.1:3000/api/patientinfo",Method.GET, param, Encoding.UTF8); MessageBox.Show(ret);
}
}
}

WinForm程序运行界面如下:

在Windows命令窗口运行node exptest.js,然后依次点击WinForm程序上的按钮,结果如下:

node.js+express,实现RESTful API的更多相关文章

  1. Node.js + Express + Knex 开发 API 接口

    安装依赖包 npm i express knex mysql2 这是 Knex 官方文档地址:Knex.js - SQL query builder. 搭建接口 config.js 新建一个 conf ...

  2. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

  3. 使用Express构建RESTful API

    RESTful服务 REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的 ...

  4. Node.js Express 框架学习

    转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...

  5. Windows下Node.js+Express+WebSocket 安装配置

    Linux参考: Linux安装Node.js 使用Express搭建Web服务器 Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V ...

  6. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

  7. body-parser Node.js(Express) HTTP请求体解析中间件

    body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...

  8. Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识

    前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...

  9. modeJS 深了解(1): Node.js + Express 构建网站预备知识

    转载:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp1.html 目录 前言 新建express项目并自定义路由规则 如何提取页面中的 ...

  10. Node.js Express 框架

    Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...

随机推荐

  1. 一道面试题来了解线程notifyAll()和wait()的方法

    题目:三个线程,分别打印A.B.C,要求按ABC的顺序循环打印10次. package com.slowcity.crud.controller; public class PrintOneTwoTh ...

  2. 大白话说Java泛型:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...

  3. numpy 初识(一)

    基本操作: 读取文件(与pandas读取csv相似): import numpy numpy.genfromtxt("word.txt", delimiter=',', dtype ...

  4. Netty源码分析(前言, 概述及目录)

    Netty源码分析(完整版) 前言 前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式链接, 并且链接池初始化的链接数并不高, 高并发场景会有获取不到连接的尴尬, 所以考虑了用netty长 ...

  5. commitizen和cz-customizable配置git commit message

    起因 团队对提交的commit message格式有约定俗称的要求,但是没有一个统一的规范,导致大家提交的commit message或多或少不太一样.因此,需要一个工具来帮助大家统一commit m ...

  6. 通过blockchain_go分析区块链交易原理

    原文链接-石匠的Blog 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下.需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自 ...

  7. PAT甲题题解-1037. Magic Coupon (25)-贪心,水

    题目说了那么多,就是给你两个序列,分别选取元素进行一对一相乘,求得到的最大乘积. 将两个序列的正和负数分开,排个序,然后分别将正1和正2前面的相乘,负1和负2前面的相乘,累加和即可. #include ...

  8. group by 和count的联合使用问题 [转]

    group by 和count的联合使用问题 今天写查询语句遇到一个问题,就是用group by进行分组以后,用count统计分组以后的个数, 开始写的语句大体是: select count(m.fb ...

  9. Day Nine

    站立式会议 站立式会议内容总结 331 今天:学习plupload 遇到问题:无 明天:学习中文分词 442 今天:解决gradle以及项目计划页面的bug 遇到的问题:调用工具类以及配置gradle ...

  10. (Alpha)Let's-展示博客

    Let's Alpha 项目答辩 ·选题由来     手机端——用户相对较多,使用环境限制相对宽松     手机游戏?校园p2p应用?线下交流!(滴滴打水?)     模式的选择:发起——加入活动   ...