zoukankan      html  css  js  c++  java
  • express组件学习

    一、express

    可以做:web application、api...

    特性:

    • 适合写简单的路由系统
    • 集成很多模板引擎
    • 中间件系统

    二、请求与响应

    var express = require('express');
    
    var app = express();
    
    //据说第二个参数是一个中间件方法
    app.get('/', function(req, res) {
        //学会查api来学习更多知识,学会学习官方api文档
        var resObj = req.method;
        //send可以发送字符串、json(包含自动stringify)对象和数组
        res.send(resObj);
    })
    
    app.listen(3000);
    console.log('listening to port 3000');

    三、路由参数

    server.js

    var express = require('express');
    
    var app = express();
    
    app.get('/profile/:id/user/:name', function(req, res) {
        console.dir(req.params);
        res.send('you requested to a profile page with the name of ' + req.params.name);
    })
    
    app.listen(3000);
    console.log('listening to port 3000');

    terminal

    chrome

    四、查询字符串

    server.js

    app.get('/', function(req, res) {
        console.dir(req.query);
        res.send('home page:' + req.query.find);
    })

    terminal

    chrome

    五、post请求和postman工具

    同时处理x-www-form和json

    var express = require('express');
    var bodyparser = require('body-parser');
    
    var app = express();
    
    //create application/json parser
    var jsonParser = bodyparser.json();
    
    //create application/x-www-form-urlencoded parser
    var urlencodedParser = bodyparser.urlencoded({ extended: false})
    
    app.post('/', urlencodedParser,function (req, res) {
        console.dir(req.body);
        res.send(req.body.name);
    })
    
    app.post('/upload', jsonParser, function (req, res) {
        console.dir(req.body);
        res.send(req.body.name);
    })

    参考链接:github/express/body-parser

    六、上传文件

    form.html

    <body>
        <form action="/upload" method="post" enctype="multipart/form-data">
            <h2>单图上传</h2>
            <input type="file" name="logo">
            <input type="submit" value="submit">
        </form>
    </body>

    server.js

    var express = require('express');
    var bodyparser = require('body-parser');
    var fs = require('fs');
    var multer = require('multer');
    var upload = multer({ dest: 'uploads/'});
    var app = express();
    
    //create application/json parser
    var jsonParser = bodyparser.json();
    
    //create application/x-www-form-urlencoded parser
    var urlencodedParser = bodyparser.urlencoded({ extended: false})
    
    app.get('/', function(req, res) {
        console.dir(req.query);
        res.send('home page:' + req.query.find);
    })
    
    app.get('/form', function(req, res) {
        var form = fs.readFileSync('./form.html', { encoding: 'utf8'});
        res.send(form);
    })
    
    app.post('/', urlencodedParser,function (req, res) {
        console.dir(req.body);
        res.send(req.body.name);
    })
    
    app.post('/upload', upload.single('logo'),function (req, res) {
        res.send({'ret_code': 0});
    })
    
    app.listen(3000);
    console.log('listening to port 3000');

    结构变化

    参考链接:github/express/multer

    tips:

    app.get('/form', function(req, res) {
        var form = fs.readFileSync('./form.html', { encoding: 'utf8'});
        res.send(form);
    })

    等价于

    app.get('/form', function(req, res) {
        res.sendFile(__dirname + '/form.html');
    })

    七、模板引擎

    引入

    app.set('view engine', 'ejs');

    使用

    server.js

    app.get('/form/:name', function(req, res) {
        var person = req.params.name;
        res.render('form', { person: person});
        res.sendFile(__dirname + '/form.html');
    })

    form.ejs

    <h1><%= person %></h1>

    遍历数组

    <ul>
        <%= data.hobbie.forEach(function(item){ %>
            <li>
                <%= item %>
            </li>
        <%= }) %>
    </ul>    

    公用模板

    使用

    <%- include('partials/header.ejs') -%>

    about.ejs

    <body>
        <%- include('partials/header.ejs') -%>
    </body>

    渲染

    app.get('/about', function(req, res) {
        var data = {age: 29, job: 'programmer', hobbie: ['eating', 'fighting', 'fishing']};
        res.render('about', { data: data});
    })

    参考链接:ejs.co、pug

    八、中间件

    解释:请求与响应之间的处理过程是中间件发挥作用的地方。

    好处:共用模块、全局性的操作

    类型:

    • 应用级中间件
    • 路由级中间件
    • 错误层次中间件
    • 内置中间件
    • 第三方中间件

     执行顺序

    app.use(function(req, res, next){
        console.log('1');
        next();
        console.log('3');
    })
    
    app.use(function(req, res, next){
        console.log('2');
    })

    路由中间件

    server.js

    var indexRouter = require('./routes/index.js');
    var userRouter = require('./routes/user.js');
    
    app.use('/', indexRouter);
    app.use('/users', userRouter);

    ./route/index.js

    var express = require('express');
    
    var router = express.Router();
    
    router.get('/', function(req, res, next) {
        res.send('root');
    })
    
    module.exports = router;

    ./route/user.js

    var express = require('express');
    
    var router = express.Router();
    
    router.get('/', function(req, res, next) {
        res.send('user');
    })
    
    module.exports = router;

    体会:用中间件写路由的好处

    参考链接:express/using-middleware

  • 相关阅读:
    WCF Server Console
    Restart IIS With Powershell
    RestartService (recursively)
    Copy Files
    Stopping and Starting Dependent Services
    多线程同步控制 ManualResetEvent AutoResetEvent MSDN
    DTD 简介
    Using Powershell to Copy Files to Remote Computers
    Starting and Stopping Services (IIS 6.0)
    java中的NAN和INFINITY
  • 原文地址:https://www.cnblogs.com/bbcfive/p/10225557.html
Copyright © 2011-2022 走看看