Node.js构建 Web 服务( 三 )

3、在code/04_templatingEngine目录下执行cp 04-useTemplating_engine.js 04-useTemplating_engine3.js命令,将之前的代码复制一份,并修改如下:
// 用Node.js生成动态页面// 作者:owlman// 时间:2019年07月12日const http = require('http')const fs = require('fs')const template = require('art-template')template.defaults.root = __dirnameclass human {constructor(name, age, sex, items=[]){this.name = namethis.age = agethis.sex = sexthis.items = items}}const server = http.createServer()server.on('request', function(req, res) {const url = req.urllet boy = nullif (url === '/') {boy = new human('凌杰', '37', '男', ['看书', '看电影','旅游'])} else if (url === '/wang') {boy = new human('蔓儿', '25', '女', ['看书', '看电影','写作'])}if (boy === null) {return res.end('<h1>404 页面没找到!</h1>')}fs.readFile('./extendTpl.htm', function(err, data) {if ( err !== null ) {return res.end('<h1>404 没找到模版文件!</h1>')}const strHtml = template.render(data.toString(), {name : boy.name,age : boy.age,sex : boy.sex,items: boy.items})res.end(strHtml)})})server.listen(8080, function(){console.log('请访问http://localhost:8080/,按Ctrl+C终止服务!')})4、保存所有文件后,在code/04_templatingEngine目录下执行node 04-useTemplating_engine3.js命令,然后打开浏览器并访问http://localhost:8080,就会看到与之前相同的页面 。
示例5. Web 表单处理这一部分示例将致力于演示用 Node.js 处理 Web 表单,我们将会分别示范如何用get和post两种方法来处理表单的请求 。首先,我们要在code目录下执行mkdir 05_webForm命令来创建用于存放这一组示例的目录 。
1. get 方法先用一个信息查询程序来演示一下如何处理使用get方法来发送请求的表单 。首先,在code/05_webForm目录下执行mkdir get_form命令,并执行以下步骤:
在code/05_webForm/get_form目录下执行npm install art-template命令,将art-template安装到当前示例项目中 。在code/05_webForm/get_form目录下执行touch index.htm,创建一个模版文件,具体如下: <!DOCTYPE html><html lang="zh-cn"><head><meta charset="UTF-8"><title>个人信息查询</title></head><body><h1>个人信息查询</h1><form action="/query" method="GET"><label for="message">请输入要查询的姓名:</label><input type="text" name="qname" /><input type="submit" value=https://www.isolves.com/it/wlyx/fwq/2020-08-31/"查询" />
{{ if name }}

{{ name }}的个人信息
姓名:{{ name }}
年龄:{{ age }}
性别:{{ sex }}
爱好:{{ each items }} {{ $value }} {{ /each }}
{{ else if query_error }}

没有找到相关信息!

{{ /if }}
3、在code/05_webForm/get_form目录下执行touch App.js,创建一个脚本文件,具体如下: const http = require('http')
const fs = require('fs')const url = require('url')const template = require('art-template')class human {constructor(name, age, sex, items=[]){this.name = namethis.age = agethis.sex = sexthis.items = items}}const db = [new human('凌杰', '37', '男', ['看书', '看电影','旅游']),new human('蔓儿', '25', '女', ['看书', '看电影','写作']),new human('张语', '32', '女', ['看书', '旅游','绘画'])]const server = http.createServer(function(req, res){const query = url.parse(req.url, true)let obj = nulllet query_error = falseif ( query.pathname === '/' ) {query_error = false}else if (query.pathname === '/query') {for(let i = 0; i < db.length; ++i) {if (db[i].name == query.query["qname"]) {obj = db[i]}}if ( obj === null ) {query_error = true}} else {return res.end('<h1>404 页面没找到!</h1>')}fs.readFile('./index.htm', function(err, data){if ( err !== null ) {return res.end('<h1>404 没找到模版文件!</h1>')}let strHtml = nullif ( obj !== null ) {strHtml = template.render(data.toString(), {name : obj.name,age : obj.age,sex : obj.sex,items: obj.items,query_error: query_error})} else {strHtml = template.render(data.toString(), {name : false,query_error: query_error})}res.end(strHtml)})})server.listen(8080, function() {console.log('请访问http://localhost:8080/,按Ctrl+C终止服务!')})4、保存所有文件后,在code/05_webForm/get_form目录下执行node app.js命令,结果如下:


推荐阅读