引入Http模块

默认你已经安装了Node.js Node当中内置了Http模块; 可以使用

var http= require("http");
复制代码

引入http模块;

Hello world

用Node.js实现一个HTTP服务器程序非常简单。我们实现一个最简单的Web程序, 它对于所有请求,都返回Hello world!,新建一个文件夹apiDemo 在里面新建一个server.js写入:

// 导入http模块:
var http = require('http');
// 创建http server,并传入回调函数:
var server = http.createServer(function (request, response) {// 回调函数接收request和response对象,// 获得HTTP请求的method和url:console.log(request.method + ': ' + request.url);// 将HTTP响应200写入response, 同时设置Content-Type: text/html:response.writeHead(200, {'Content-Type': 'text/html'});// 将HTTP响应的HTML内容写入response:response.end('Hello world!');
});// 让服务器监听8080端口:
server.listen(8080);console.log('Server is running at http://127.0.0.1:8080/');
复制代码

然后在当前目录命令提示符下(cmd等)运行, 输入:

node server.js
复制代码

然后打开浏览器输入:http://127.0.0.1:8080/ 就可以看到:

同时可以看到命令行中有打印的信息:

GET: /
GET: /favicon.ico
复制代码

主要需要了解的是:

http.createServer(function(request, response){})
复制代码

它的作用是创建一个http服务,里面传一个回调函数,函数中包含两个参数分别是(request,response)。 其中request是请求对象,response是响应对象。 可以根据request对象拿到请求头的一些信息,如: request.url--返回请求路径 响应成功后: response.writeHead()————发送一个响应头给请求 response.end('xxx')————响应成功 返回xxx 参考 Nodez中文网-HTTP

路由

我们是想当访问http://127.0.0.1:8080/的时候返回当前目录的index.html。 也就是说当request.url === '/'true时就可以确定当前请求的是根目录了,

var url = request.url;
console.log(url);
// '/'
复制代码

我们能创建一个服务,并且能使用response.end('Hello world!');返回“Hello world!”。如果想返回一个文件则需要用到Node.js的一个模块了——fs 文件系统。 它是Node当中处理文件的模块,首先引入:

var fs= require('fs');
复制代码

可以使用fs.readFile()来读取文件

fs.readFile('./index.html', function(err, data)  {if (err) throw err;console.log(data);
// <Buffer 3c 21 44 4f 4...>
});
复制代码

回调函数 有两个参数 (err, data),其中 data 是文件的内容,以二进制形式返回。

然后我们就可以编写代码了,当访问根目录时,返回index.html文件

var http= require('http');
var fs= require('fs');
var server= http.createServer(function(request, response){var url = request.url;if(url === '/'){fs.readFile('./index.html', function(err, data){if(!err){response.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"});response.end(data)}else{throw err;}});}else{console.log("错误");}
});
server.listen(8080, '127.0.0.1');
复制代码

然后在当前目录下新建index.html,在这里我们可以写一个ajax请求,一会我们点击按钮来实现ajax请求一组数据:

 <div id="box">看不到看不到</div><button onclick="success()">我是按钮</button><script>function success(){var http= new XMLHttpRequest();http.onreadystatechange= function(){if(http.status == 200 && http.readyState == 4){var msg= http.responseText;var box= document.getElementById('box');box.innerHTML= JSON.parse(msg).name;}}//发送请求http.open('GET', '/data');http.send();}</script>
复制代码

这段代码是点击按钮的时候 会向/data发起一个ajsx请求,

实现简单的API接口

既然能访问根目录时可以返回html文件,那我们可以自己设定一个url,当请求这个url是我们就给它返回一组json数据。正常来讲这些数据应该是从数据库读取的,在这里只模拟一组json数据,在当前目录新建一个data.json

{"name": "尼古拉丁 * 赵四"}
复制代码

所以当前的目录结构是:

然后我们可以在server.js中判断一下,当请求的url是/data时,则返回data.json:

if(url === '/data'){fs.readFile('./data.json', function(err, data){if(!err){response.writeHead(200, {"Content-Type": "application/json"});response.end(data);}else{throw err;}})}
复制代码

然后打开浏览器 http://127.0.0.1:8080 后,就会出现index.html页面,点击出现的按钮就会触发一个对 /data的ajax请求,当server.js接受到请求后,就会判断url === '/data',然后它就会吧 data.json返回给我们。

最后的实现是点击按钮出现尼古拉丁 * 赵四
GItHub源码:node-apiDemo
参考:
廖雪峰-http详解
Node-fs

转载于:https://juejin.im/post/5c13699af265da611e4d8a87

使用Node.js写一个简单的api接口相关推荐

  1. 用Python写一个简单的api接口

    python框架有很多,例如:Flask,Django,FastAPI 等.本文将使用 Flask 来编写 API 接口. 安装Flask 首先,您需要安装 Flask: pip install fl ...

  2. 如何用 Node.js 实现一个简单的 Websocket 服务?

    最近正在研究 Websocket 相关的知识,想着如何能自己实现 Websocket 协议.到网上搜罗了一番资料后用 Node.js 实现该协议,倒也没有想象中那么复杂,除去注释语句和 console ...

  3. Node.js搭建一个简单的服务器

    文章目录 Node.js的安装 了解Node.js模块系统 服务器的搭建 一.创建一个Web服务器 注意 程序代码 运行 二.静态资源托管 静态资源 注意 程序代码 运行 三.简单接口的实现(简单服务 ...

  4. JS写一个简单的五星评价

    JS写一个简单的五星评价 在做前端网页页面的时候很多时候回有遇到星级评价的模块,用到的地方挺多所以自己就上传下方便大家和自己使用(不支持半星评价因为没有半星的图). 效果图如下: 下面是我们的代码: ...

  5. 用 Node.js 写一个多人游戏服务器引擎

    英文原文:https://www.smashingmagazine.com/2018/12/multiplayer-text-adventure-engine-node-js/ 摘要 听说过文字冒险游 ...

  6. 用 Node.js 写一个多人游戏服务器引擎 1

    翻译:疯狂的技术宅 原文: https://www.smashingmagazine.... 本文首发微信公众号:jingchengyideng 欢迎关注,每天都给你推送新鲜的前端技术文章 摘要 听说 ...

  7. 原生js写一个简单的编辑器

    js原生写的编辑器,主要是使用document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)来实现的 如果该指令不被支持或停用将会 ...

  8. 用js写一个简单的前世今生

    前世今生,没有今生只有前世 刚开始的样子,没有任何的输入 在下面的input内输入自己的名字,然后点击确认 就会有前世的一些内容,具体内容都可以自己修改,我只是简单做了一个demo css的内容 &l ...

  9. 用three.js写一个简单的3D射门游戏

    这个小游戏很简单,一共由3个部分构成.1个平面(球场),1个球体(足球)还有一个立方体(球门). 上个图给你们感受一下简陋的画风(掘金最高上传5M图片,原来图片都太大了压缩后很不清晰) 当按下空格键时 ...

最新文章

  1. 操作Docker容器
  2. c++ 析构函数 ~
  3. 代码之谜(零)- 开篇/前言/序
  4. python多线程执行_python多线程实现同时执行两个while循环
  5. e480换高分屏_全高清都不够用?是时候趁着双11上飞利浦的高分屏了
  6. sql server 2005日志文件过大问题解决后分析--针对发布订阅产生的日志问题
  7. python : HTML+CSS (定时器轮寻)
  8. Error: Java heap space
  9. 以post方式携窗体等参数向服务器发送请求 发出去的字节流 返回的内容
  10. 关于 HDFS Append
  11. Oracle自增主键的添加[sequence]--表数据已存在
  12. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句 (以后在写SQL时,要有这种思想!!!)
  13. VJ 1490 小菜的数码验证
  14. 开虚拟机服务器cpu百分之百应该管,为何我在虚拟机里开游戏CPU使用率90--100
  15. Java实现语音阅读功能开发(输入文字,转语音播放)
  16. HIT信息安全概论复习:1~10
  17. 关于C++、C#实现EXCEL数据库批量导入数据库万行以上数据效率问题
  18. 函数型数据主成分分析(FPCA)
  19. 【HDU】1862 EXCEL排序(结构体排序)
  20. 【Gateway】服务网关--Gateway

热门文章

  1. 个人作业1:小学四则运算——基于控制台
  2. 20162313苑洪铭 第一周作业
  3. 【tyvj1052】【树状dp】没有上司的舞会
  4. Android Intent的几种用法全面总结
  5. 获取access中表的相关信息
  6. 好理解的Java内存虚假共享(False Sharing)性能损耗以及解决方案
  7. 深入理解PHP原理之变量(Variables inside PHP)
  8. C语言编程技巧-signal(信号机制)
  9. windows7 64位机上CUDA7.0配置及在VS2010中的简单使用举例
  10. 在图像变换中用最小二乘法求解仿射变换参数