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

  • 相关阅读:
    flex 连接mysql
    正确配置调试world wind on vs2008
    FLex调用servlet连接数据库
    c# 连接mysql并webservice数据
    ADF连接SOM
    转载加收藏关于OPENGL配置VS2008
    flex不能显示本地发布的地图
    Symbian专区
    asp.net控件开发基础學習
    控制网页大小
  • 原文地址:https://www.cnblogs.com/bbcfive/p/10225557.html
Copyright © 2011-2022 走看看