山西省建设厅官方网站,系统开发必须遵守的原则有哪些,官网网站建设需求文档,小学生广告语20条文章目录前言express介绍安装RESTful接口规范express的简单使用一个最简单的服务器#xff0c;仅仅只需要几行代码便可以实现。restful规范的五种接口类型请求信息req的获取响应信息res的设置中间件的使用自定义中间件解决跨域nodejs相关其它内容前言
express作为nodejs必学的…
文章目录前言express介绍安装RESTful接口规范express的简单使用一个最简单的服务器仅仅只需要几行代码便可以实现。restful规范的五种接口类型请求信息req的获取响应信息res的设置中间件的使用自定义中间件解决跨域nodejs相关其它内容前言
express作为nodejs必学的模块之一从这篇文章开始介绍express一些基础内容express的安装restful接口规范express的接口开发express的跨域处理express的中间件使用请求信息req常见处理请求头res常见处理等。为接下来真正的项目框架下开发一个express服务器做准备。
express介绍
express是在nodejs内置模块http的基础上开发也就是说http模块有的apiexpress全都有并且它们的用法也很类似。
express.js的优点在于它封装了一些常用的接口处理方法更有利于中间件的扩展让接口的开发更加规范合理等。
安装
express不是nodejs的内置模块属于第三方开源模块想要使用需要下载安装。
将来要部署到服务器在开发环境和生产环境都需要使用输入命令行
npm install express --save 或者 yarn add express在开发过程中会发现我们一直在编写服务端的代码每次修改后都需要关掉原来的服务器重启 node express.js才能生效。
为此再安装一个辅助npm包nodemonnodemon能自动监听文件的更新并自动重启。
npm install -g nodemon 或者 yarn global add nodemon 安装好了之后我们重启一下服务器就再也不需要每次更改代码后都要重启了
nodemon express.jsRESTful接口规范
既然要开发服务器我们就要遵循接口开发规范这里简单介绍RESTful接口设计规范。
尽量使用https协议如果条件不支持就只能http协议应该尽量将所有的api都放在专有域名之下比如https://api.dengxi.com当然如果你的接口比较简单业务也不复杂你就可以 主域名 /api比如网站的域名为http://dxyx-together.cn,那所有的api都放在http://dxyx-together.cn/api/xxx,后面的xxx就是api具体的path。版本号如果是专有域名 https://api.dengxi.com当前版本为v1那对应的就是https://api.dengxi.com/v1,如果不是专有域名就将版本信息放在响应头中这样可能不如直接放在url上直观。路径名称又称为终点endpoint命名要求不允许出现英文的动词而应该是名词复数。比如有一个接口返回许多用户的信息就应该设计为xxx/api/users。如果返回的数据直接就是某个数据库表格的内容那就直接以数据库表格名称命名即可。常用的有五种接口get(获取数据)post(创建数据)delete(删除数据)put(完整更新数据)patch(某一数据部分更新)不常用的有两种headoptions很多时候这几种接口类型可以混用但按照规范它们有属于自己的使用场景。身份认证。部分接口涉及账户信息比如常见的中后台管理系统c端也有购物车、会员中心、钱包等场景基于JWT的接口权限认证。跨域处理在服务端设置cors跨域处理允许客户端跨域请求资源特别是当接口放在专有域名下时。每一个接口的每一次请求服务器都必须给予http状态码回应和数据两个部分。http状态码分为五类 1xx(相关信息) 2xx(操作成功) 3xx(重定向) 4xx(客户端错误) 5xx(服务器错误)一共有一百多种状态码常用的也就二十多种。返回的数据部分通常是JSON对象因此服务器返回头需要将Content-Type属性设置为application/json错误处理主要是需要正确使用http状态码主要是4xx和5xx并且返回的信息尽可能详尽以便更快速的排查。
express的简单使用
一个最简单的服务器仅仅只需要几行代码便可以实现。
//express.js
var express require(express);
var app express();
var port 3000;app.get(/, function (req, res) {res.send(hello world);
});app.listen(port, function () {console.log(server runing at 3000);
});再输入命令行服务器就成功启动
nodemon express.jsrestful规范的五种接口类型
var express require(express);
var app express();
var port 3000;app.get(/, function (req, res) {var query req.queryconsole.log(query)res.send(hello world);
});app.post(/, function (req, res) {res.send(post hello world);
});app.put(/users,function(req,res) {res.send(put hello world);
})app.delete(/users,function(req,res) {res.send(delete hello world);
})app.patch(/users,function(req,res) {res.send(delete hello world);
})app.listen(port, function () {console.log(server runing at 3000);
});请求信息req的获取
比如我们获取get请求的参数 req.query
//express.js
var express require(express);
var app express();
var port 3000;app.get(/api, function (req, res) {console.log(req.query)res.status(200)
});app.listen(port, function () {console.log(server runing at 3000);
});关于req的所有属性和方法你可以在这里找到
http://expressjs.com/en/5x/api.html#req
中文版本的 http://expressjs.com/zh-cn/4x/api.html#req
响应信息res的设置
var express require(express);
var app express();
var port 3000;app.get(/api, function (req, res) {var query req.queryconsole.log(query)res.set(Content-Type, application/json)res.status(200)res.json({code:200,data: 请求成功了})
});app.listen(port, function () {console.log(server runing at 3000);
});关于res的所有属性和方法你可以在这里找到 http://expressjs.com/en/5x/api.html#res
中文版本 http://expressjs.com/zh-cn/4x/api.html#res
中间件的使用
express官方提供了几个比较重要的中间件 http://expressjs.com/en/5x/api.html#express
比如express.json() 当客户端发送的数据是json数据时req.body是取不到正常的数据的所以我们需要通过这个中间件处理一下才可以。
我用http模块来请求一下我express服务器
const http require(http);// 请求刚刚创建的服务器
const options {hostname: localhost,port: 3000,path: /api,method: post,headers: {Content-Type: application/json,},
};const req http.request(options, (res) {console.log(状态码: ${res.statusCode});console.log(响应头: ${JSON.stringify(res.headers)});res.setEncoding(utf8);res.on(data, (chunk) {console.log(响应主体: ${chunk});});res.on(end, () {console.log(响应中已无数据。);});
});
req.write(JSON.stringify({ name: dx })) // 发送了一个json数据
req.end();通过app.use 来调用中间件达到全局使用的目的
var express require(express);
var app express();
var port 3000;app.use(express.json())app.post(/api, function (req, res) {console.log(req.body)res.set(Content-Type, application/json)res.status(200)res.json({code:200,data: 请求成功了})
});app.listen(port, function () {console.log(server runing at 3000);
});也可以在某个接口中单独使用中间件只对这一个接口生效。
var express require(express);
var app express();
var port 3000;// app.use(express.json())app.post(/api, express.json(), function (req, res) {// var query req.queryconsole.log(req.body)res.set(Content-Type, application/json)res.status(200)res.json({code:200,data: 请求成功了})
});app.listen(port, function () {console.log(server runing at 3000);
});自定义中间件
中间件的本质其实就是一个函数express的中间件函数呢有三个参数reqresnext
创造一个中间件用来打印日志让每一次客户端请求的body都能在日志中看到用来简化之前的方案。
function (req, res, next) {console.log(req.body);// 执行下一个中间件必须调用否则请求会被拦截在这里next();
}再创造一个中间件用来满足响应总是返回status 200 并且返回相同的json
function (req, res, next) {res.set(Content-Type, application/json);res.status(200);res.json({ code: 200, data: 请求成功了 });// 执行下一个中间件必须调用否则请求会被拦截在这里next();
}使用这两个中间件
var express require(express);
var app express();
var port 3000;app.use(express.json());app.use(function (req, res, next) {console.log(req.body);next();
});app.use(function (req, res, next) {res.set(Content-Type, application/json);res.status(200);res.json({ code: 200, data: 请求成功了 });next();
});
// app.post 里面啥也没干
app.post(/api, express.json(), function (req, res) {
});app.listen(port, function () {console.log(server runing at 3000);
});左边是服务器接口打印了客户端传过来的name:dx,右边是客户端请求同样拿到了状态码200和json数据。
中间件的执行顺序就是从上往下依次执行执行的顺序也很重要。 如果是某一个单独的接口的中间件中间件1比中间件2先执行性。
app.post(/api, 中间件1, 中间件2, function (req, res) {
});解决跨域
一 用一种粗暴的方式任意域名都能成功请求。
var express require(express);
var app express();
var port 3000;//设置允许跨域访问该服务.
app.all(*, function (req, res, next) {res.header(Access-Control-Allow-Origin, *); // *表示所有域名你也可以指定某个特别的域名 www.dxyx-together.cnres.header(Access-Control-Allow-Headers, Content-Type);res.header(Access-Control-Allow-Methods, *); // *表示所有请求方式都可以跨域你也可以设置 比如只允许get和post GET;POSTres.header(Content-Type, application/json;charsetutf-8); next();
});app.use(express.json());app.use(function (req, res, next) {console.log(req.body);next();
});app.use(function (req, res, next) {res.set(Content-Type, application/json);res.status(200);res.json({ code: 200, data: 请求成功了 });next();
});app.post(/api, express.json(), function (req, res) {});app.listen(port, function () {console.log(server runing at 3000);
});
二 express 的 cors跨域 cors 是 Express 的一个第三方中间件通过安装和配置 cors 中间件可以很方便地解决跨域问题 使用步骤分为三步
运行 npm install cors 安装中间件使用 const cors require(cors) 导入中间件在路由之前调用 app.use(cors()) 配置中间件
var express require(express);
var cors require(cors)
var app express();
var port 3000;//设置允许跨域访问该服务.
app.use(cors())app.use(express.json());app.use(function (req, res, next) {console.log(req.body);next();
});app.use(function (req, res, next) {res.set(Content-Type, application/json);res.status(200);res.json({ code: 200, data: 请求成功了 });next();
});app.post(/api, express.json(), function (req, res) {});app.listen(port, function () {console.log(server runing at 3000);
});cors的更多使用方式详见cors插件官方介绍 https://www.npmjs.com/package/cors
nodejs相关其它内容
nodejs commonjs介绍 nodejs fs模块介绍 nodejs path模块介绍 nodejs events模块介绍 nodejs http模块介绍 nodejs net模块介绍 nodejs url模块介绍 nodejs process模块介绍 nodejs buffer模块介绍 nodejs stream 模块介绍 文章转载自: http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn http://www.morning.cgdyx.cn.gov.cn.cgdyx.cn http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn http://www.morning.kyytt.cn.gov.cn.kyytt.cn http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn http://www.morning.fqyqm.cn.gov.cn.fqyqm.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.tbnn.cn.gov.cn.tbnn.cn http://www.morning.bmrqz.cn.gov.cn.bmrqz.cn http://www.morning.pgjyc.cn.gov.cn.pgjyc.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn http://www.morning.rjznm.cn.gov.cn.rjznm.cn http://www.morning.kqqk.cn.gov.cn.kqqk.cn http://www.morning.fynkt.cn.gov.cn.fynkt.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.lstmq.cn.gov.cn.lstmq.cn http://www.morning.hqmfn.cn.gov.cn.hqmfn.cn http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.rwlsr.cn.gov.cn.rwlsr.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.cjcry.cn.gov.cn.cjcry.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.qnzld.cn.gov.cn.qnzld.cn http://www.morning.ckcjq.cn.gov.cn.ckcjq.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn http://www.morning.sxhdzyw.com.gov.cn.sxhdzyw.com http://www.morning.rppf.cn.gov.cn.rppf.cn http://www.morning.lmqfq.cn.gov.cn.lmqfq.cn http://www.morning.pwrkl.cn.gov.cn.pwrkl.cn http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.rfyk.cn.gov.cn.rfyk.cn http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.rdmz.cn.gov.cn.rdmz.cn http://www.morning.trmpj.cn.gov.cn.trmpj.cn http://www.morning.mhmdx.cn.gov.cn.mhmdx.cn http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn http://www.morning.qpqcq.cn.gov.cn.qpqcq.cn http://www.morning.rwqj.cn.gov.cn.rwqj.cn http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.ljygq.cn.gov.cn.ljygq.cn http://www.morning.c7617.cn.gov.cn.c7617.cn http://www.morning.jczjf.cn.gov.cn.jczjf.cn http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn http://www.morning.cyyhy.cn.gov.cn.cyyhy.cn http://www.morning.rntby.cn.gov.cn.rntby.cn http://www.morning.zwckz.cn.gov.cn.zwckz.cn http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn http://www.morning.wmfh.cn.gov.cn.wmfh.cn http://www.morning.xzrbd.cn.gov.cn.xzrbd.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.wdhlc.cn.gov.cn.wdhlc.cn http://www.morning.spxk.cn.gov.cn.spxk.cn http://www.morning.gtmdq.cn.gov.cn.gtmdq.cn http://www.morning.rahllp.com.gov.cn.rahllp.com http://www.morning.rszbj.cn.gov.cn.rszbj.cn http://www.morning.rgwrl.cn.gov.cn.rgwrl.cn http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn http://www.morning.jbxd.cn.gov.cn.jbxd.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.ygqhd.cn.gov.cn.ygqhd.cn http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.jfbrt.cn.gov.cn.jfbrt.cn http://www.morning.mnccq.cn.gov.cn.mnccq.cn http://www.morning.lizpw.com.gov.cn.lizpw.com http://www.morning.cwfkm.cn.gov.cn.cwfkm.cn http://www.morning.niukaji.com.gov.cn.niukaji.com