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。

参考:

     express项目中使用body-parser

     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地址解决方法

 

参考:

     Express 4.x API 中文手册 api

     Node.js Express 框架 runoob基础教程

     nodejs的express使用介绍

     Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs

     body-parser-github 官方API

     expressjs-install

 

补充知识

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 作为编码方式的远程调用规范。

参考:

     application/json 四种常见的 POST 提交数据方式

     浅析application/x-www-form-urlencoded和multipart/form-data的区别

以上是关于nodejs Web服务(Express)的主要内容,如果未能解决你的问题,请参考以下文章

nodejs Web服务(Express)

express搭建简易web的服务器

物联网服务NodeJs-5天学习第二天篇③ ——Express Web框架 和 中间件

nodejs 构建本地web测试服务器 以及 解决访问静态资源的问题!

一步步精通NodeJs的简单实例

nodejs+express搭建服务器