NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证

  JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象。而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs、http等内置对象。Express作为NodeJS的Web应用框架,可以帮助我们快速开发Web网站。


  开发环境

  • NodeJS:v0.10.30
  • npm:1.4.21
  • OS:Win7旗舰版 32bit
  • Express:4.2.0
  • MongoDB:2.6.3
E:\project> node -v
v0.10.30
E:\project> npm -v
1.4.21
E:\project> express -V
4.2.0

  1、建立工程

  使用express命令建立工程,并支持ejs:

E:\project> express -e nodejs-demo

   create : nodejs-demo
   create : nodejs-demo/package.json
   create : nodejs-demo/app.js
   create : nodejs-demo/public
   create : nodejs-demo/public/javascripts
   create : nodejs-demo/public/images
   create : nodejs-demo/public/stylesheets
   create : nodejs-demo/public/stylesheets/style.css
   create : nodejs-demo/routes
   create : nodejs-demo/routes/index.js
   create : nodejs-demo/routes/users.js
   create : nodejs-demo/views
   create : nodejs-demo/views/index.ejs
   create : nodejs-demo/views/error.ejs
   create : nodejs-demo/bin
   create : nodejs-demo/bin/www

   install dependencies:
     $ cd nodejs-demo && npm install

   run the app:
     $ DEBUG=nodejs-demo ./bin/www

E:\project>

  根据提示下载依赖包:

E:\project> cd .\nodejs-demo
E:\project\nodejs-demo> npm install
npm WARN deprecated static[email protected]: use serve-favicon module
static[email protected] node_modules\static-favicon

debug@0.7.4 node_modules\debug

ejs@0.8.8 node_modules\ejs

cookie[email protected] node_modules\cookie-parser
├── cookie[email protected]
└── cookie@0.1.0

morgan@1.0.1 node_modules\morgan
└── bytes@0.3.0

body[email protected] node_modules\body-parser
├── qs@0.6.6
├── raw[email protected] ([email protected], [email protected])
└── type-is@1.1.0 ([email protected])

express@4.2.0 node_modules\express
├── parseurl@1.0.1
├── utils[email protected]
├── cookie@0.1.2
├── merge[email protected]
├── escape[email protected]
├── range[email protected]
├── fresh@0.2.2
├── cookie[email protected]
├── debug@0.8.1
├── methods@1.0.0
├── buffer[email protected]
├── serve[email protected]
├── path[email protected]
├── qs@0.6.6
├── send@0.3.0 ([email protected], [email protected])
├── accepts@1.0.1 ([email protected], [email protected])
└── type-is@1.1.0 ([email protected])
E:\project\nodejs-demo>

  工程建立成功,启动服务:

E:\project\nodejs-demo> npm start

> [email protected] start E:\project\nodejs-demo
> node ./bin/www

  本地3000端口被打开,在浏览器地址栏输入localhost:3000,访问成功。


  2、目录结构

  • bin——存放命令行程序。
  • node_modules——存放所有的项目依赖库。
  • public——存放静态文件,包括css、js、img等。
  • routes——存放路由文件。
  • views——存放页面文件(ejs模板)。
  • app.js——程序启动文件。
  • package.json——项目依赖配置及开发者信息。
E:\project\nodejs-demo> dir

    目录: E:\project\nodejs-demo

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         2014/8/16     21:55            bin
d----         2014/8/16     22:03            node_modules
d----         2014/8/16     21:55            public
d----         2014/8/16     21:55            routes
d----         2014/8/16     21:55            views
-a---         2014/8/16     21:55       1375 app.js
-a---         2014/8/16     21:55        327 package.json

  3、Express配置文件

  打开app.js:

 1 var express = require(‘express‘);
 2 var path = require(‘path‘);
 3 var favicon = require(‘static-favicon‘);
 4 var logger = require(‘morgan‘);
 5 var cookieParser = require(‘cookie-parser‘);
 6 var bodyParser = require(‘body-parser‘);
 7
 8 var routes = require(‘./routes/index‘);
 9 var users = require(‘./routes/users‘);
10
11 var app = express();
12
13 // view engine setup
14 app.set(‘views‘, path.join(__dirname, ‘views‘));
15 app.set(‘view engine‘, ‘ejs‘);
16
17 app.use(favicon());
18 app.use(logger(‘dev‘));
19 app.use(bodyParser.json());
20 app.use(bodyParser.urlencoded());
21 app.use(cookieParser());
22 app.use(express.static(path.join(__dirname, ‘public‘)));
23
24 app.use(‘/‘, routes);
25 app.use(‘/users‘, users);
26
27 /// catch 404 and forward to error handler
28 app.use(function(req, res, next) {
29     var err = new Error(‘Not Found‘);
30     err.status = 404;
31     next(err);
32 });
33
34 /// error handlers
35
36 // development error handler
37 // will print stacktrace
38 if (app.get(‘env‘) === ‘development‘) {
39     app.use(function(err, req, res, next) {
40         res.status(err.status || 500);
41         res.render(‘error‘, {
42             message: err.message,
43             error: err
44         });
45     });
46 }
47
48 // production error handler
49 // no stacktraces leaked to user
50 app.use(function(err, req, res, next) {
51     res.status(err.status || 500);
52     res.render(‘error‘, {
53         message: err.message,
54         error: {}
55     });
56 });
57
58
59 module.exports = app;

  4、Ejs模板

  修改app.js,让ejs模板文件使用扩展名为html的文件:

13 // view engine setup
14 app.set(‘views‘, path.join(__dirname, ‘views‘));
15 //app.set(‘view engine‘, ‘ejs‘);
16 app.engine(‘html‘, require(‘ejs‘).renderFile);
17 app.set(‘view engine‘, ‘html‘);

  修改完成后,重命名views/index.ejs为views/index.html。重启服务,访问成功。


  5、安装常用库及页面分离

  添加bootstrap和jQuery:

E:\project\nodejs-demo> npm install bootstrap
bootstrap@3.2.0 node_modules\bootstrap
E:\project\nodejs-demo> npm install jquery
jquery@2.1.1 node_modules\jquery
E:\project\nodejs-demo>

  接下来,把index.html分成三个部分:

  • header.html——页面头部区域。
  • index.html——页面内容区域。
  • footer.html——页面底部区域。

  header.html

1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="utf-8">
5     <title><%= title %></title>
6     <!-- Bootstrap -->
7     <link href="/stylesheets/bootstrap.min.css" rel="stylesheet" media="screen">
8 </head>
9 <body screen_capture_injected="true">

  index.html

1 <% include header.html %>
2 <h1><%= title %></h1>
3 <p>Welcome to <%= title %></p>
4 <% include footer.html %>

  footer.html

1     <script src="/javascripts/jquery.min.js"></script>
2     <script src="/javascripts/bootstrap.min.js"></script>
3 </body>
4 </html>

  重启服务,访问成功。


  6、路由

  登录设计:

访问路径 页面 描述
/ index.html 不需要登录,可以直接访问。
/home home.html 必须用户登录以后,才可以访问。
/login login.html 登录页面,用户名密码输入正确,自动跳转到home.html。
/logout 退出登录后,自动跳转到index.html。

  打开app.js文件,增加路由配置:

26 app.use(‘/‘, routes);
27 app.use(‘/users‘, users);
28 app.use(‘/login‘, routes);
29 app.use(‘/logout‘, routes);
30 app.use(‘/home‘, routes);

  打开routes/index.js文件,添加对应方法:

 1 var express = require(‘express‘);
 2 var router = express.Router();
 3
 4 /* GET home page. */
 5 router.get(‘/‘, function(req, res) {
 6   res.render(‘index‘, { title: ‘Express‘ });
 7 });
 8
 9 router.route(‘/login‘)
10 .get(function(req, res) {
11     res.render(‘login‘, { title: ‘用户登录‘ });
12 })
13 .post(function(req, res) {
14     var user={
15         username: ‘admin‘,
16         password: ‘123456‘
17     }
18     if(req.body.username === user.username && req.body.password === user.password){
19         res.redirect(‘/home‘);
20     }
21     res.redirect(‘/login‘);
22 });
23
24 router.get(‘/logout‘, function(req, res) {
25     res.redirect(‘/‘);
26 });
27
28 router.get(‘/home‘, function(req, res) {
29     var user={
30         username:‘admin‘,
31         password:‘123456‘
32     }
33     res.render(‘home‘, { title: ‘Home‘, user: user });
34 });
35
36 module.exports = router;

  创建views/login.html和views/home.html两个文件:

  login.html

 1 <% include header.html %>
 2 <div class="container">
 3     <form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post">
 4         <fieldset>
 5             <legend>用户登录</legend>
 6             <div class="form-group">
 7                 <label class="col-sm-3 control-label" for="username">用户名</label>
 8                 <div class="col-sm-9">
 9                     <input type="text" class="form-control" id="username" name="username" placeholder="用户名" required>
10                 </div>
11             </div>
12             <div class="form-group">
13                 <label class="col-sm-3 control-label" for="password">密码</label>
14                 <div class="col-sm-9">
15                     <input type="password" class="form-control" id="password" name="password" placeholder="密码" required>
16                 </div>
17             </div>
18             <div class="form-group">
19                 <div class="col-sm-offset-3 col-sm-9">
20                     <button type="submit" class="btn btn-primary">登录</button>
21                 </div>
22             </div>
23         </fieldset>
24     </form>
25 </div>
26 <% include footer.html %>

  home.html

1 <% include header.html %>
2 <h1>Welcome <%= user.username %>, 欢迎登录!!</h1>
3 <a class="btn" href="/logout">退出</a>
4 <% include footer.html %>

  修改index.html,增加登录链接:

1 <% include header.html %>
2     <h1>Welcome to <%= title %></h1>
3     <p><a href="/login">登录</a></p>
4 <% include footer.html %>

  路由及页面已准备好,重启服务,访问成功。


  7、session

  安装中间件express-session:

E:\project\nodejs-demo> npm install express-session
express[email protected] node_modules\express-session
├── cookie@0.1.2
├── cookie[email protected]
├── on[email protected]
├── utils[email protected]
├── parseurl@1.3.0
├── buffer[email protected]
├── depd@0.4.4
├── debug@1.0.4 ([email protected])
└── uid[email protected] ([email protected], [email protected])
E:\project\nodejs-demo>

  安装中间件connect-mongodb:

E:\project\nodejs-demo> npm install connect-mongodb

> [email protected] install E:\project\nodejs-demo\node_modules\connect-mongodb\nod
e_modules\mongodb\node_modules\kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)

|
E:\project\nodejs-demo\node_modules\connect-mongodb\node_modules\mongodb\node_mo
dules\kerberos>node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild
|
> [email protected] install E:\project\nodejs-demo\node_modules\connect-mongodb\node_m
odules\mongodb\node_modules\bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)

E:\project\nodejs-demo\node_modules\connect-mongodb\node_modules\mongodb\node_mo
dules\bson>node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\.
.\node_modules\node-gyp\bin\node-gyp.js" rebuild
connect[email protected] node_modules\connect-mongodb
├── connect@1.9.2 ([email protected], [email protected], [email protected])
└── mongodb@1.4.8 ([email protected], [email protected], [email protected])
E:\project\nodejs-demo>

  安装中间件mongodb:

E:\project\nodejs-demo> npm install mongodb
-

> [email protected] install E:\project\nodejs-demo\node_modules\mongodb\node_module
s\kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)

-
E:\project\nodejs-demo\node_modules\mongodb\node_modules\kerberos>node "C:\Progr
am Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\b
in\node-gyp.js" rebuild
|
> [email protected] install E:\project\nodejs-demo\node_modules\mongodb\node_modules\b
son
> (node-gyp rebuild 2> builderror.log) || (exit 0)

E:\project\nodejs-demo\node_modules\mongodb\node_modules\bson>node "C:\Program F
iles\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\n
ode-gyp.js" rebuild
mongodb@1.4.8 node_modules\mongodb
├── kerberos@0.0.3
├── readable[email protected] ([email protected], [email protected], inheri
ts@2.0.1, core-util-is@1.0.1)
└── bson@0.2.11 ([email protected])
E:\project\nodejs-demo>

  添加database/settings.js和database/msession.js这两个文件:

  settings.js

1 module.exports = {
2     COOKIE_SECRET: ‘ywang1724.com‘,
3     URL: ‘mongodb://127.0.0.1:27017/nodedb‘,
4     DB: ‘nodedb‘,
5     HOST: ‘127.0.0.1‘,
6     PORT: 27017,
7     USERNAME: ‘admin‘,
8     PASSWORD: ‘123456‘
9 };

  msession.js

1 var Settings = require(‘./settings‘);
2 var Db = require(‘mongodb‘).Db;
3 var Server = require(‘mongodb‘).Server;
4 var db = new Db(Settings.DB, new Server(Settings.HOST, Settings.PORT, {auto_reconnect:true, native_parser: true}),{safe: false});
5
6 module.exports = db;

  修改app.js文件:

 1 var express = require(‘express‘);
 2 var path = require(‘path‘);
 3 var favicon = require(‘static-favicon‘);
 4 var logger = require(‘morgan‘);
 5 var cookieParser = require(‘cookie-parser‘);
 6 var bodyParser = require(‘body-parser‘);
 7
 8 //采用connect-mongodb中间件作为Session存储
 9 var session = require(‘express-session‘);
10 var Settings = require(‘./database/settings‘);
11 var MongoStore = require(‘connect-mongodb‘);
12 var db = require(‘./database/msession‘);
13
14 var routes = require(‘./routes/index‘);
15 var users = require(‘./routes/users‘);
16
17 var app = express();
18
19 // view engine setup
20 app.set(‘views‘, path.join(__dirname, ‘views‘));
21 //app.set(‘view engine‘, ‘ejs‘);
22 app.engine(‘html‘, require(‘ejs‘).renderFile);
23 app.set(‘view engine‘, ‘html‘);
24
25 app.use(favicon());
26 app.use(logger(‘dev‘));
27 app.use(bodyParser.json());
28 app.use(bodyParser.urlencoded());
29 app.use(cookieParser());
30 //session配置
31 app.use(session({
32     cookie: { maxAge: 600000 },
33     secret: Settings.COOKIE_SECRET,
34     store: new MongoStore({
35         username: Settings.USERNAME,
36         password: Settings.PASSWORD,
37         url: Settings.URL,
38         db: db})
39 }))
40 app.use(function(req, res, next){
41     res.locals.user = req.session.user;
42     next();
43 });
44
45 app.use(express.static(path.join(__dirname, ‘public‘)));
46
47 ......

  修改index.js文件:

 1 var express = require(‘express‘);
 2 var router = express.Router();
 3
 4 /* GET home page. */
 5 router.get(‘/‘, function(req, res) {
 6     res.render(‘index‘, { title: ‘Express‘ });
 7 });
 8
 9 router.route(‘/login‘)
10 .get(function(req, res) {
11     res.render(‘login‘, { title: ‘用户登录‘ });
12 })
13 .post(function(req, res) {
14     var user = {
15         username: ‘admin‘,
16         password: ‘123456‘
17     }
18     if(req.body.username === user.username && req.body.password === user.password){
19         req.session.user = user;
20         res.redirect(‘/home‘);
21     } else {
22         res.redirect(‘/login‘);
23     }
24 });
25
26 router.get(‘/logout‘, function(req, res) {
27     req.session.user = null;
28     res.redirect(‘/‘);
29 });
30
31 router.get(‘/home‘, function(req, res) {
32     res.render(‘home‘, { title: ‘Home‘ });
33 });
34
35 module.exports = router;

  本地安装数据库MongoDB,新建用户nodedb。重启服务,访问成功。


  8、页面访问控制及提示

  访问控制设计:

访问路径 描述
/ 任何人都可以访问,不需要认证。
/home 拦截get请求,调用authentication()进行认证,不通过则自动跳转到登录页面。
/login 任何人都可以访问,不需要认证。
/logout 任何人都可以访问,不需要认证。

  修改index.js文件:

34 router.get(‘/home‘, function(req, res) {
35     authentication(req, res);
36     res.render(‘home‘, { title: ‘Home‘ });
37 });
38
39 function authentication(req, res) {
40     if (!req.session.user) {
41         return res.redirect(‘/login‘);
42     }
43 }

  重启服务,访问成功。

  添加页面提示,修改app.js文件,增加res.locals.message:

40 app.use(function(req, res, next) {
41     res.locals.user = req.session.user;
42     var err = req.session.error;
43     delete req.session.error;
44     res.locals.message = ‘‘;
45     if (err) {
46         res.locals.message = ‘<div class="alert alert-warning">‘ + err + ‘</div>‘;
47     }
48     next();
49 });

  修改index.js文件,增加req.session.error:

 1 var express = require(‘express‘);
 2 var router = express.Router();
 3
 4 /* GET home page. */
 5 router.get(‘/‘, function(req, res) {
 6     res.render(‘index‘, { title: ‘Express‘ });
 7 });
 8
 9 router.route(‘/login‘)
10 .get(function(req, res) {
11     if (req.session.user) {
12         res.redirect(‘/home‘);
13     }
14     res.render(‘login‘, { title: ‘用户登录‘ });
15 })
16 .post(function(req, res) {
17     var user = {
18         username: ‘admin‘,
19         password: ‘123456‘
20     }
21     if (req.body.username === user.username && req.body.password === user.password) {
22         req.session.user = user;
23         res.redirect(‘/home‘);
24     } else {
25         req.session.error=‘用户名或密码不正确‘;
26         res.redirect(‘/login‘);
27     }
28 });
29
30 router.get(‘/logout‘, function(req, res) {
31     req.session.user = null;
32     res.redirect(‘/‘);
33 });
34
35 router.get(‘/home‘, function(req, res) {
36     authentication(req, res);
37     res.render(‘home‘, { title: ‘Home‘ });
38 });
39
40 function authentication(req, res) {
41     if (!req.session.user) {
42         req.session.error=‘请先登录‘;
43         return res.redirect(‘/login‘);
44     }
45 }
46
47 module.exports = router;

  修改login.html,增加<%- message %>:

5 <legend>用户登录</legend>
6 <%- message %>
7 <div class="form-group">

  重启服务,访问成功。输入错误用户名密码:

图1 登录不成功提示

NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证

时间: 2024-10-21 22:56:13

NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证的相关文章

搭建开发框架Express,实现Web网站登录验证

JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里 的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器.每一种解析器都是一个运行环境,不但允许JS定义各种数据结 构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了 document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs.http等内 置

[MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)

      之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类后重写OnActionExecuting方法,在RegisterGlobalFilters方法中注册新建的Filter类,之后直接在需要验证的Action前加上Filter标记即可. 1. 新建登陆校验类CheckLoginAttribute using System.Web.Mvc; namespace P

nodejs学习笔记一:安装express框架并构建工程目录

偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了,话不多说,开始我的学习记录. 想要学习node首先开发环境不可少,下面就记录一下安装express框架和构建第一个node工程项目(跳过安装nodejs环境,因为已经装过,nodejs.org下载对应的安装包下一步傻瓜化安装): 1.安装express express是nodejs上最流行的web开

nodejs学习笔记二:解析express框架项目文件

上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添加的,而node_modules这个文件夹内存放着项目需要的中间件,public是存放静态文件的文件夹,routes顾名思义就是路由解析文件的所在,views就是ejs模板引擎的视图文件,app.js是项目运行的入口存放着全局大量的配置,package.json是加载第三方包的配置文件.下面来一一解

Exchange2013学习笔记(3)-更改outlook web app登录不用输入域名方法

我们安装好EXchange 2013后,在登录 outlook web app等时,默认是要输入 域名\用户名,如果域名不长,并且容易记的话,还OK.如果是有些长和不容易记的话,所以要登录就有些麻烦了. 还有就是每个人都是喜欢偷懒,所以能少输就一定少输入,那我们们怎么解决这问题呢?? 下面让我们来把这个方法简单的介绍下: 先登录到 https://s12.hznethome.com/ecp (https://邮件服务器全称/ecp) 选择>>服务器>>>虚拟目录>>

《从零开始学Swift》学习笔记(Day 2)——使用Web网站编写Swift代码

原创文章,欢迎转载.转载请注明:关东升的博客 Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub.com,左栏是代码编辑窗口,右栏是运行结果窗口.可以在任何平台下编译和运行Swift程序. 欢迎关注关东升新浪微博@tony_关东升.关注智捷课堂微信公共平台,了解最新技术文章.图书.教程信息 更多精品iOS.Cocos.移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.c

Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)

目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能----文件上传,示例以一个上传图片的功能为例子 上传功能命名用formidable实现,示例很简单! PS:最近比较忙,距上一次更新已经比较久了^_^! formidable简介 nodejs原生实现上传还是比较麻烦,有兴趣的自已去参考一下网上有网友写的代码 这里选择了formidable,也是githu

Nodejs学习笔记(三)——一张图看懂Nodejs建站

前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试Nodejs>之后,代码编写环境就从Sublime转战到Eclipse下,感觉顺手多了.于是就跟着Scott老师学起了Nodejs建站的课程(推荐大家点进去看看),踏上了未爬先走的路子. 作为一个白里透白的小白来说,今天主要记录下如何用Nodejs搭建一个小小的网站,以及自己对于这种Nodejs建站的运

nodejs学习笔记(基于v7.4.0)

nodejs学习笔记 一.buffer: 全局对象(单例   Buffer.from   Buffer.alloc   Buffer.allocUnsafe ) 编码类型 描述 ascii 仅仅用于7位ascall数据编码,速度快,如果设置了将会剥离高位 utf8 多字节的编码的Unicode字符,网页文档大部分默认都为它. utf16le 小端编码的Unicode字符,2或者4个字节 ucs2 utf16le的别名 base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之