html5 - 通過post抓取的頁面數據 為啥不能展現在頁面上
問題描述
這是node.js代碼
var http = require('http'), fs = require('fs'), querystring = require('querystring'), url = require('url');http.createServer(function(req,res){ var postdata=''; var query='what'; var pathname = url.parse(req.url).pathname; req.setEncoding('utf8'); if(pathname=='/'){var indexPage = fs.readFileSync('表單.html');res.writeHead(200,{'Content-Type':'text/html'});res.end(indexPage); } if(pathname=='/about'){req.on('data',function(chunk){ postdata += chunk;});req.on('end',function() { console.log(postdata); query = querystring.parse(postdata); console.log(query);});res.writeHead(200, {'Content-Type':'text/plain'});console.log(query.Name);console.log(query.number);res.write(query.number+ 'and '+query.number);res.end(); } else{res.writeHead(404,{'Content-Type':'text/plain'});res.end('Can not find the source'); }}).listen(2000,'127.0.0.1');console.log('The server is running at port 2000');這是html代碼<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>表單填寫</title></head><body><form action='/about' method='post'> <p> Name: <input type='text' name='Name'></p> <p>SchoolNumber:<input type='text' name='number'></p> <p><input type='submit' value='提交'></p></form></body></html>執行結果圖:
求大神解決 小弟感激不盡
問題解答
回答1:原因分析:回調函數執行順序的問題, 加點打印信息看看
res.write()那一行返回的是你最開始定義的query并沒有執行req.on()里面的操作,而這時的query還是你定義的字符串'what',它不是一個json對象,所以就沒有number屬性,所以是undefined。解決方案:你可以把res.write()寫在req.on()里面,像這樣:
怎么沒見你判斷請求方法啊?這個是我之前寫的一個示例,你可以參考一下:
var http=require(’http’);var url=require(’url’);var fs=require(’fs’);var querystring=require(’querystring’);var mgd=require(’./mongodb.js’);http.createServer(function(req,res){ switch(req.method){case ’POST’: update(req,res); break;case ’GET’: get(req,res); break;default:break; }}).listen(8080);function update(req,res){ var pathname=url.parse(req.url).pathname; var postData=’’; /*接收評論*/ if(pathname==’/postComment’){req.addListener(’data’,function(data){ postData+=data;});req.addListener(’end’,function(){ var json=querystring.parse(postData); mgd(function(c){c.insert(’comment’,json,function(){ var json={} json.code=1; res.writeHead(’Content-Type:application/json;charset=UTF-8’); res.write(JSON.stringify(json)); res.end();}); });}) }}function get(req,res){ var pathname=url.parse(req.url).pathname;/*主頁*/ if(pathname===’/’){fs.readFile(’test.html’,function(err,file){ res.end(file);}) } /*獲取評論列表*/ if(pathname==’/comment’){mgd(function(c){ c.find(’comment’,{},function(data){var json={};if(data.length!=0){ json.code=1; json.data=data;}else{ json.code=0; json.data=null;}json=JSON.stringify(json)res.writeHead(’Content-Type:application/json;charset=UTF-8’);res.write(json);res.end(); }) }) }}
mongodb.js的代碼需要的話可以在我的github上看一波,其實就是一個簡單的評論demo
相關文章:
1. docker安裝后出現Cannot connect to the Docker daemon.2. 為什么我ping不通我的docker容器呢???3. android - webview 自定義加載進度條4. mysql - 怎么讓 SELECT 1+null 等于 15. javascript - 微信音樂分享6. 網頁爬蟲 - 用Python3的requests庫模擬登陸Bilibili總是提示驗證碼錯誤怎么辦?7. javascript - 微信小程序封裝定位問題(封裝異步并可能多次請求)8. 并發模型 - python將進程池放在裝飾器里為什么不生效也沒報錯9. linux - openSUSE 上,如何使用 QQ?10. python 怎樣用pickle保存類的實例?
