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
    }
  • 相关阅读:
    3:基于乐观锁(两种)控制并发: version、external锁
    4: ES内执行Groovy脚本,做文档部分更新、执行判断改变操作类型
    2 Match、Filter、排序、分页、全文检索、短语匹配、关键词高亮
    第63章 ASP.NET Identity 支持
    第62章 EntityFramework支持
    第61章 IdentityServer Options
    第60章 设备流交互服务
    第59章 IdentityServer交互服务
    第58章 Profile Service
    第57章 GrantValidationResult
  • 原文地址:https://www.cnblogs.com/bbcfive/p/10225298.html
Copyright © 2011-2022 走看看