前端工程师-Node、express,koa- 处理ajax的get,post请求


先上一下页面的代码:三种都用这个页面,可以直接运行的,本地测试过。希望可以给大家帮助,欢迎指正

“/nodejs/practice/login”这个路由地址是我本地的,请参考的小伙伴按照自己的地址改一下哦。

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>学习</title>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>

<body>
    <label for="username">用户名:</label><input id="username" type="text" name='username' />
    <label for="password">密码:</label><input id="password" type="password" name='password' />
    <input type="button" value="登录" id="login">
    <br><span>状态:</span></label>
    <p id="loginInfo"></p>
    <br><span>用户:</span>
    <p id="loginName"></p>

    <script>
        $(function() {
            $('#login').click(function() {
                if ($('#username').val() && $('#password').val()) {
                    //get
                    $.get("http://localhost:3000/nodejs/practice/login", {
                        'user': $('#username').val(),
                        'password': $('#password').val()
                    }, function(data) {
                        console.info(data);
                    });
                    //post
                    $.ajax({
                        url: 'http://localhost:3000/nodejs/practice/login',
                        type: 'POST',
                        dataTypt: 'json',
                        ContentType: 'application/json; charset=utf-8',
                        data: {
                            'user': $('#username').val(),
                            'password': $('#password').val()
                        },
                        success: function(data) {
                            $('#loginInfo').html(data.resBody.msg);
                            $('#loginName').html(data.resBody.user);
                            console.info(data);
                            /**
                             *注意:
                             *node请补充这一句: JSON.parse(data); 
                             */
                        },
                        error: function(e) {
                            console.error(e);
                        }
                    });
                }
            });
        });
    </script>
</body>

</html>               

nodeJs

建立 server.js

var http = require('http');
var url = require('url');
var querystring = require('querystring');
var router = require('./router');

http.createServer(function(req, res) {
    console.log(req);
    var pathname = url.parse(req.url).pathname;
    res.setHeader("Access-Control-Allow-Origin", "*");
    if (req.method === 'GET') {
        var querystr = querystring.parse(url.parse(req.url).query);
        var msg = router.route(pathname, querystr);
        res.writeHead(msg.code, { "Content-type": "Application/JSON; charset=utf-8" });
        res.end(JSON.stringify(msg.resBody));
    } else {
        var body = '';
        var msg = {};
        req.on('data', function(chunk) {
            body += chunk;
            console.log("1." + body);
        });

        req.on('end', function() {
            console.log("结束");
            body = querystring.parse(decodeURI(body));
            msg = router.route(pathname, body);
            res.writeHead(msg.code, { "Content-type": "Application/JSON; charset=utf-8" });
            console.log(msg);
            res.write(JSON.stringify(msg.resBody));
            res.end();
        });
    };
}).listen(3000);

console.log("服务已启动,请访问127.0.0.1:3000");

建立router,js

function route(pathname, querystr) {
    if (pathname === '/nodejs/practice/login') {
        return {
            'code': 200,
            'resBody': {
                'msg': '登录成功',
                'user': querystr.user
            }
        };
    } else {
        return {
            'code': 404,
            'resBody': {
                'msg': '没有这个路由啦',
            }
        };
    }
}

exports.route = route;

Express

const express = require('express');
var app = express();
const url = require('url');
const queryString = require('querystring');
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/nodejs/practice/login', (req, res) => {
    res.header('Access-Control-Allow-Origin', '*');
    console.log(req);
    res.json({
        'resCode': 200,
        'resBody': {
            'msg': '登录成功',
            // 'user': queryString.parse(url.parse(req.url).query).user
            'user': req.query.user
        }
    });
});

app.post('/nodejs/practice/login', (req, res) => {
    res.header('Access-Control-Allow-Origin', '*');
    console.log(req);
    res.json({
        'resCode': 200,
        'resBody': {
            'msg': '登录成功',
            // 'user': queryString.parse(url.parse(req.url).query).user
            'user': req.body.user
        }
    });
});

app.listen(3000);

//res.end 是用来快速结束响应的返回空数据
//如果想返回数据,就用res.send 或者res.json
//当传递对象或数组时,这两个方法是相同的,但是res.json()也会转换非对象,如null和undefined,这些无效的JSON。

Koa 

const Koa = require('koa');
const app = new Koa();
const router = require('koa-router')();
const koaBody = require('koa-body')();
const koaCors = require('koa-cors');
const url = require('url');
const queryString = require('querystring');

app.use(koaCors());

router.post('/nodejs/practice/login', koaBody,
    (ctx) => {
        console.log(ctx.request.body);
        // => POST body
        ctx.body = {
            'resCode': 200,
            'resBody': {
                'msg': '登录成功',
                'user': ctx.request.body.user
            }
        };
    }
);

router.get('/nodejs/practice/login', koaBody, (ctx) => {
    console.log(ctx.request);
    ctx.body = {
        'resCode': 200,
        'resBody': {
            'msg': '登录成功',
            'user': queryString.parse(url.parse(ctx.request.url).query).user
        }
    };
})

app.use(router.routes());

app.listen(3000);


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM