nodejs Web服务(Express)
Posted zhen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs Web服务(Express)相关的知识,希望对你有一定的参考价值。
概述
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
使用 Express 可以快速地搭建一个完整功能的网站。
Express 框架核心特性:
可以设置中间件来响应 HTTP 请求。
定义了路由表用于执行不同的 HTTP 请求动作。
可以通过向模板传递参数来动态渲染 html 页面。
安装:
npm install express
npm install express --save
关联中间件安装:
npm install body-parser --save
npm install cookie-parser --save
npm install multer --save
以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录。
body-parser - node.js 中间件,用于处理 (ContentType)JSON, Raw, Text 和 URL 编码的数据。
cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。
Express中间件body-parser
express项目中通常使用body-parser进行post参数的解析,最常用的是其中的json和urlencoded的parser,可分别对以JSON格式的post参数和urlencoeded的post参数进行解析,均可获得一个JSON化的req.body。
参考:
body-parser github项目
Express API:
// 访问express静态资源 link var express = require(\'express\'); var app = express(); app.use(express.static(\'public\')); // 工程目录 /npm_modules /public/index.html // 启动 var server = app.listen(8081, function () { }) // 访问 http://serverIp:port/index.html // 用作接口服务器 link var express = require(\'express\'); var bodyParser = require(\'body-parser\'); // application/x-www-form-urlencoded 编码解析 var parseForm = bodyParser.urlencoded({extended: false}); // application/json编码解析 var parseJson = bodyParser.json(); var httpReq = express(); // http://localhost:8081/index/IndexPage.html httpReq.use(express.static(\'public\')); function testExpressApi() { /** * express get请求 * http://localhost:8081/obtain/clientOnlineState?name=aa01&password=010203 */ httpReq.get(\'/obtain/clientOnlineState\', function (req, resp) { console.log(req.query); resp.end(JSON.stringify(req.query)); }); /** * express post请求 * http://localhost:8081/update/remoteClientInfo * {"name":"aa01","password":"010203"} */ httpReq.post(\'/update/remoteClientInfo\', parseJson, function (req, resp) { console.log(req.body); resp.end(JSON.stringify(req.body)); }); /** * 服务器监听8081端口 * @type {*} */ var server = httpReq.listen(8081, function () { // var host = server.address().address; var port = server.address().port; console.log("http://localhost:%s", port) }); }
Express开发问题:
Q1.获取远程连接IP地址
var ip = req.headers[\'x-forwarded-for\'] || req.connection.remoteAddress;
参考:
Express.js: how to get remote client address
nodejs express获取不了用户的外网ip地址解决方法
参考:
Node.js Express 框架 runoob基础教程
Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs
body-parser-github 官方API
补充知识
P1.POST常见的几种提交数据方式
服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。
application/x-www-form-urlencoded
最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。例如 php 中,$_POST[\'title\'] 可以获取到 title 的值,$_POST[\'sub\'] 可以得到 sub 数组。
application/json
application/json 这个 Content-Type 作为响应头告诉服务端消息主体是序列化后的 JSON 字符串。JSON 格式支持比键值对复杂得多的结构化数据。
multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
text/xml
它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。
参考:
以上是关于nodejs Web服务(Express)的主要内容,如果未能解决你的问题,请参考以下文章
物联网服务NodeJs-5天学习第二天篇③ ——Express Web框架 和 中间件