zoukankan      html  css  js  c++  java
  • nodejs的get与post

    index.html

    <html>
        <body>
            <form action="/api/v1/records" method="post">
            name: <input type="text" name="name">
            age: <input type="text" name="age" >
            <input type="submit" value="submit">
            </form>
        </body>
    </html>

    app.js

    var server = require('./server');
    var router = require('./router');
    
    var handler = require('./handler');
    
    var handle = {};
    handle['/'] = handler.home;
    handle['/home'] = handler.home;
    handle['/review'] = handler.review;
    handle['/api/v1/records'] = handler.api_records;
    
    server.startServer(router.route,handle);

    server.js

    var http = require('http');
    var fs = require('fs');
    var url = require('url');
    var querystring = require('querystring');
    
    function startServer (route,handle) {
        var onRequest = function(request, response) {
            //解析取得?之前的路由
            var pathname = url.parse(request.url).pathname;
            var data = [];
            request.on('error', function (err) {
                console.error(err);
            }).on('data', function(chunk) {
                data.push(chunk);
            }).on('end', function() {
                if (request.method === 'post') {
                    //当post的数据过大时,选择主动销毁
                    if (data.length > 1e6) {
                        request.connection.destroy();
                    }
                    data = Buffer.concat(data).toString();
                    route(handle, pathname, response, querystring.parse(data));
                } else {
                    //解析取得?之后的路由 true返回一个json
                    //此方法只能取到get的值,post方法无法取值
                    var params = url.parse(request.url, true).query;
                    route(handle, pathname, response, params); 
                }
            });
            
        }
        
        var server = http.createServer(onRequest);
        server.listen(3000);    
    } 
    
    console.log('finished');
    module.exports.startServer = startServer;

    router.js

    var fs = require('fs');
    
    function route(handle, pathname, response, params) {
        console.log('Routing a request for' + pathname);
        if (typeof handle[pathname] === 'function') {
            handle[pathname](response, params);
        } else {
            response.writeHead(200, {'Content-Type': 'text/html'});
            fs.createReadStream(__dirname + '/404.html', 'utf8').pipe(response);
        }
    }
    
    module.exports.route = route;

    handler.js

    var fs = require('fs');
    
    function home(response) {
        response.writeHead(200, { 'Content-Type': 'text/html'});
        fs.createReadStream(__dirname + '/index.html', 'utf8').pipe(response);
    }
    
    function review(response) {
        response.writeHead(200, { 'Content-Type': 'text/html'});
        fs.createReadStream(__dirname + '/review.html', 'utf8').pipe(response);
    }
    
    function api_records(response, params) {
        response.writeHead(200, { 'Content-Type': 'application/json' });
        response.end(JSON.stringify(params));
    }
    
    module.exports = {
        home: home,
        review: review,
        api_records: api_records
    }
  • 相关阅读:
    【转】关于LWF——线性工作流
    【转】对抗拖库 ―― Web 前端慢加密
    【转】用C#调用Windows API向指定窗口发送
    使用 Redis 如何设计分布式锁?
    SpringBoot如何使用WebSocket实现前后端交互?
    Redis缓存使用中的热key问题
    Spring的BeanUtils的copyProperties方法需要注意的点
    解决github中图片不显示的问题
    java中JsonSerializer的用法(前后端单位转换必备)
    Spring Boot2.X中findOne的用法
  • 原文地址:https://www.cnblogs.com/bbcfive/p/10225298.html
Copyright © 2011-2022 走看看