vavid 2020-06-11
1.将表格中的数据动态加入表格中,js脚本中拼接了css,html,script,练习
const http = require("http"); const urlTool = require("url"); //1,浏览器向node服务发送了一个请求,返回了一个表格的html //2.然后在想浏览器发送一个css.java的请求,返回css, //3.浏览器对不标准的html也会解析 3 const server = http.createServer((request, response)=>{ //获取参数 let method = request.method.toUpperCase(); let pathname = urlTool.parse(request.url).pathname; //检测路径 if(method === ‘GET‘ && pathname === ‘/users‘){ //如果报文路径和文件路径没关联,可以自定义url //1. 乱码问题 response.setHeader("content-type",‘text/html;charset=utf-8‘); const arr = [ {name: ‘knight‘, age: 18}, {name: ‘xiaoming‘, age: 20}, {name: ‘xiaoning‘, age: 28}, {name: ‘xiaotian‘, age: 18}, {name: ‘xiaohigh‘, age: 20}, ]; //返回一个表格 let str = ` <link rel="stylesheet" href="/css.java"> <script src="/app.js"></script> <table border="1"><tr><td>姓名</td> <td>年龄</td></tr>`; for(let i=0;i<arr.length;i++){ str += `<tr><td>${arr[i].name}</td><td>${arr[i].age}</td></tr>`; } str += `</table>`; response.end(str); }else if(method === ‘GET‘ && pathname === ‘/css.java‘){ response.end(` body{ background:pink; } `); }else{ response.end("OK"); } }); server.listen(8000, ()=>{ console.log(‘server is running.. 8000 端口监听......‘); })
二,登录表单,服务响应练习
表单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>登录</title> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="col-xs-4 col-xs-offset-4"> <h2 class="page-header">用户登录</h2> <form method="POST" action="/login"> <div class="form-group"> <label for="exampleInputEmail1">用户名</label> <input type="text" class="form-control" name="username"> </div> <div class="form-group"> <label for="exampleInputPassword1">密码</label> <input type="password" class="form-control" name="password"> </div> <hr> <button type="submit" class="btn btn-primary btn-block">登录</button> </form> </div> </div> </body> </html>
js脚本
const http = require(‘http‘); const urlTool = require("url"); const fs = require(‘fs‘); const qs = require(‘querystring‘); //1.浏览器想发送一个get,/login的请求,然后node服务器返回一个login.html(一个表单)给浏览器 // 2.然后浏览器将表单内容填写了,发送了post,/login的请求,服务器返回了请求体的数据 // function getClientIp(req) { // return req.headers[‘x-forwarded-for‘] || // 判断是否有反向代理 IP // req.connection.remoteAddress || // 判断 connection 的远程 IP // req.socket.remoteAddress || // 判断后端的 socket 的 IP // req.connection.socket.remoteAddress; // } const server = http.createServer((request, response) => { //获取 方法和路径 let method = request.method.toUpperCase(); let pathname = urlTool.parse(request.url).pathname; //如果 GET /login 则返回一个表单页面 if (method === ‘GET‘ && pathname === ‘/login‘) { fs.readFile(__dirname + ‘/login.html‘, (err, data) => { response.end(data); }); // POST /login 处理表单的数据 } else if (method === ‘POST‘ && pathname === ‘/login‘) { //请求体数据提取 //1. 声明变量 let body = ‘‘; //2. 绑定 data 事件 request.on(‘data‘, chunk => { body += chunk; }) //3. 绑定 end 事件 request.on(‘end‘, () => { console.log(body); //将请求体的字符串形式 转为对象形式 let data = qs.parse(body); // fs.writeFile("./access.log", body + ‘--ip:‘+ getClientIp(request)+‘\r\n‘, (err) => { // console.log(data); // response.end(body); // }) console.log(data); response.end(body); }) }else { response.end("404"); } }); server.listen(80, () => { console.log("服务已经启动, 80 端口监听中...."); })