zoukankan      html  css  js  c++  java
  • ☀【Node】处理POST请求

    Node入门 √
    http://www.nodebeginner.org/index-zh-cn.html

    index.js

    var server = require("./server")
    var router = require("./router")
    var requestHandlers = require("./requestHandlers")
    
    var handle = {}
    handle["/"] = requestHandlers.start
    handle["/start"] = requestHandlers.start
    handle["/upload"] = requestHandlers.upload
    
    server.start(router.route, handle)

    server.js 服务器

    var http = require("http")
    var url = require("url")
    
    function start(route, handle) {
        function onRequest(request, response) {
            var postData = ""
            var pathname = url.parse(request.url).pathname
            console.log("Request for " + pathname + " received.")
    
            request.setEncoding("utf8")
    
            request.addListener("data", function(postDataChunk) {
                postData += postDataChunk
                console.log("Received POST data chunk '" + postDataChunk + "'.")
            })
    
            // 监听 /start /upload 的请求,/start 没有post也有end
            request.addListener("end", function() {
                route(handle, pathname, response, postData)
            })
    
        }
    
        http.createServer(onRequest).listen(8888)
        console.log("Server has started.")
    }
    
    exports.start = start

    router.js 路由

    function route(handle, pathname, response, postData) {
        console.log("About to route a request for " + pathname)
        if (typeof handle[pathname] === 'function') {
            handle[pathname](response, postData)
        } else {
            console.log("No request handler found for " + pathname)
            response.writeHead(404, {"Content-Type": "text/plain"})
            response.write("404 Not found")
            response.end()
        }
    }
    
    exports.route = route

    requestHandlers.js 请求处理程序

    var querystring = require("querystring")
    
    function start(response, postData) {
        console.log("Request handler 'start' was called.")
    
        var body = '<!doctype html>' +
        '<html lang="zh-CN">' +
            '<head>' +
                '<meta charset="utf-8">' +
                '<title></title>' +
            '</head>' +
            '<body>' +
                '<form action="/upload" method="post">' +
                    '<input name="title" type="text">' +
                    '<textarea name="description"></textarea>' +
                    '<input type="submit" value="Submit text">' +
                '</form>' +
            '</body>' +
        '</html>'
    
        response.writeHead(200, {"Content-Type": "text/html"})
        response.write(body)
        response.end()
    }
    
    function upload(response, postData) {
        var body = '<!doctype html>' +
        '<html lang="zh-CN">' +
            '<head>' +
                '<meta charset="utf-8">' +
                '<title></title>' +
            '</head>' +
            '<body>' +
                querystring.parse(postData).title +
                querystring.parse(postData).description +
            '</body>' +
        '</html>'
        console.log("Request handler 'upload' was called.")
        response.writeHead(200, {"Content-Type": "text/html"})
        response.write(body)
        response.end()
    }
    
    exports.start = start
    exports.upload = upload
  • 相关阅读:
    使用 mysql_random_data_load 生成随机数据
    TeamViewer 运行 AlterID 时候报错Cloud not create a fake UUID
    1.6 在WHERE子句中引用取别名的列
    本地登录多实例mysql ,默认登录数据库问题
    统计前10位的占用空间较大的目录
    Oracle查看用户权限
    [LeetCode]Binary Tree Preorder Traversal
    [LeetCode]Insertion Sort List
    [LeetCode]Implement strStr()
    [LeetCode]Remove Element
  • 原文地址:https://www.cnblogs.com/jzm17173/p/3330998.html
Copyright © 2011-2022 走看看