node.js - express #3

继上次写完了简单的路由规定后,这次我们要来写一个简单的表单。

但在开始之前要先介绍一下HTTP的动作 GET / POST 这两个最常见的行为

<form id="form1" method="动作" action=""></form>

不同的Method就是对同一件事情做不同的操作。
再来举服务生点餐的例子,
假设现在我们要点餐,我们必须先知道菜单是甚么(get),
我们会向服务生点餐(post),
我们想要取消刚才点的餐点(delete),
我们想要重新点一次(put),
我们想要加点甜点和饮料(patch)。
-- LEARNING BY HACKING

GET 和 POST 同样都能传送值

GET 会把要传送的值放在header上,会直接显示在URL,因此不适合传输隐密的资料,
同时 GET 会被Cache纪录、且有长度限制POST是把资料放在讯息主体内进行传送,不会被Cache纪录且对资料长度没有限制,
因此POST比GET更安全,所以较适合用来传送隐密性较高的资料

第三个应用:简单的表单 - GET

先建立一个表单页面 form.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>form</title><style>h2 { text-align: center; }div { width: 400px; margin: 10px auto; }label{ width: 100%; display: inline-block; }input, textarea{ width: 100%; display: inline-block; }#send{ margin: 40px auto 0 auto; display: block; width: 50px; }</style></head><body><h2>意见栏</h2><form id="comment" method="GET" action="http://127.0.0.1:8082/sendcomment"><div><label for="name">姓名:</label><input type="text" name="name" id="name"></div><div><label for="email">信箱:</label><input type="text" name="email" id="email"></div><div><label for="comment">意见:</label><textarea name="comment" id="comment" cols="30" rows="10"></textarea></div><input id="send" type="submit" value="送出"></form></body></html>

在这边会注意到action指向了一个叫作sendcomment的动作,这边之后会另外写程式处理

因为新增了一个form.html,在原本的server.js内也要补上这个的路由

 var express = require('express'); var app = express(); app.get('/', function(req, res) {     res.sendfile('./views/index.html'); }); app.get('/about', function(req, res) {     res.sendfile('./views/about.html'); }); app.get('/form', function(req, res) {     res.sendfile('./views/form.html'); }); app.get('*', function(req, res) {     res.send('404 not found'); }); var server = app.listen(8082, function() {     console.log('Listening on port 8082'); });
$ node server.js

就会有以下的画面了
http://img2.58codes.com/2024/20105154QIaxC3Nox7.png

再来就是要来处理GET触发的动作了
点送出后就会得到

http://127.0.0.1:8082/sendcomment?name=&email=&comment=

这一串URL经过解析(parse)后就会得到
动作: sendcomment
资料: name, email, comment
只要能够取得name email comment这些我们想要使用的资料就行了

再原本的server.js补上动作

 var express = require('express'); var app = express(); app.get('/', function(req, res) {     res.sendfile('./views/index.html'); }); app.get('/about', function(req, res) {     res.sendfile('./views/about.html'); }); app.get('/form', function(req, res) {     res.sendfile('./views/form.html'); }); //刚刚那个GET动作写在此 app.get('/sendcomment', function(req, res) {     //这边可以得到刚刚的三个资料(name,email,comment) console.log('name:' + req.query.name);    console.log('email' + req.query.email);    console.log('comment' + req.query.comment);    //回传谢谢回覆    res.send(req.query.name + '谢谢你的回覆'); }); app.get('*', function(req, res) {     res.send('404 not found'); }); var server = app.listen(8082, function() {     console.log('Listening on port 8082'); });

执行画面

http://img2.58codes.com/2024/20105154a6i9PJjkII.png

http://img2.58codes.com/2024/20105154Tkd0tPFoCH.png

在终端机那边会得到这三个参数

http://img2.58codes.com/2024/20105154Wh2UmgYqnC.png

express deprecated res.sendfile: Use res.sendFile

这一行只是叫你把 res.sendfile 改成 res.sendFile
(res.sendfile 是 res.sendFile 的alias)

但是使用GET会受到长度的限制加上所有参数都都暴露在URL上,
并不是一个好方法,因此接下来会介绍POST的方法


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章