一、制作调查问卷
先去网上找一张调查问卷的html页面(直接复制网页源代码,包括link链接里的css文件),所有文件放在一个文件夹下面,就叫‘调查问卷’吧,然后修改问卷中问题,变成你的调查问卷,关于表单提交的地址后面再讲。就像下面这张表单:
二、nodejs服务器托管资源
使用express包创建服务,托管静态资源(路径为我们的调查问卷整个文件夹),这里我监听的是3000端口。关于nodejs运行环境,express装包就不细说了。
const express = require('express');
const app = express();
app.use(express.static('../调查问卷'))//要托管的文件夹地址
app.listen(3000, ()=>{
console.log("服务已经启动, 3000端口监听中...");
});
只要在同一局域网下就能访问这个调查问卷了,不过,不可能让所有调查对象都在一个网络下,所以,这里可以使用了花生壳内网穿透工具(直接在网上搜官网注册就能使用体验版,还有很多的内网穿透工具),使用外网也能访问到我的问卷,
三、花生壳的使用
不下载app也可以直接使用花生壳管理平台,注册账号,进入内网穿透。
https://console.hsk.oray.com/
添加映射,选择http映射,内网主机填本机地址,(不知道自己主机的可以在cmd中运行ipconfig查看),端口填写托管的端口。
添加完映射后开启映射,然后外网就能通过这个访问地址访问到自己的内网主机了。
四、获取数据
假设这是html上的表单
<form name="input" action="http://10.50.119.116:8000" method="get">
年级:<input id="aa"type="text"name="a" >
最爱吃的水果:<input id="bb"type="text"name="b" >
</form>
表单是以键值对的形式提交的数据,这里name=”a”,a就是键,值为用户输入的内容,下面服务器处理的时候用req.query.a就代表用户输入的内容。
Nodejs服务器获取数据代码,这个监听端口需要和静态托管的端口不同
const express = require('express');
const app = express();
const fs = require('fs');
app.get('', (req, res) => {
var kk = req.query;
res.send();
var data = "年级:" + kk.a + " "+"最爱吃的水果:" + kk.b + "\n";
fs.appendFile('表单数据.txt', data, function (err) {
if (err) {
return console.error(err);
}
console.log("已写入");
});
});
app.listen(8000, ()=>{
console.log("服务已经启动, 8000端口监听中...");
});
表单数据.txt文件中就会出现如下形式的数据
但是上述方法获取的数据,只是内网用户给的,外网只能访问页面, 如果表单提交到我的本地端口,外网用户不能向我的ip提交数据,所以,这里再使用一条映射(因为免费版的刚好给了两条映射),映射到本机的8000端口。
修改表单向另一个外网端口提交数据
<form name="input" action="http://51t9j08858.51vip.biz:52276" method="get">
年级:<input id="aa"type="text"name="a" >
最爱吃的水果:<input id="bb"type="text"name="b" >
</form>
再看看fs写文件吧 ,用writeFile的话会清空文件再写入,用appendFile就能一条一条往后添加
fs.appendFile('表单数据.txt', data, function (err) {
if (err) {
return console.error(err);
}
console.log("已写入");
});
这里表单数据.txt与两个服务器js文件在同级目录中,所有不添加路径
然后表单就提交到新的映射地址,数据会传递到本地,就可以通过读写文件将数据写在txt文件中,由于是使用内网穿透的方式获取的数据,就拿不到访问对象的ip,而且这也是个人使用的数据,就没有必要使用sql数据库存储数据了。