有木有现成的轮子?还是要自己吃透rtmp协议自己写?
有没有谁知道怎么用node做rtmp代理?
Masq - 适用于 Web 开发环境的 DNS server
Masq
Masq是一个简单的本地 DNS 服务器,类似于 DNSMasq。第一个版本来自于 Pow。
请注意:Masq 目前仅适用于 macOS。
本地 DNS
因为不能在 /etc/hosts
文件中使用通配符,无法实现类似功能:
127.0.0.1 *.dev.
为了解决这个问题,需要安装一个类似于 DNSMasq 的 DNS 代理。如果你是一个 JavaScript 开发者,你可以尝试一下 Masq。
开始
Masq(或者 Pow)的 DnsServer
被设计为对指定的顶级域名(及其子域名)的 DNS A
查询响应 IP 地址 127.0.0.1
。
当与 Mac OS X的 /etc/resolver system结合使用时,不需要添加和删除本地Web开发的主机名等类似配置。
安装
$ npm install -g masq
使用
用户配置文件 ~/.masqconfig
在服务启动时读取执行。 您可以配置顶级域,监听端口等选项。如:
export MASQ_DOMAINS=dev,test
然后你可以运行 masq --print-config
,将会得到如下输出:
$ masq --print-config
MASQ_BIN='/path/to/masq/bin/masq'
MASQ_DNS_PORT='20560'
MASQ_DOMAINS='dev,test'
MASQ_EXT_DOMAINS=''
MASQ_LOG_ROOT='/path/to/Library/Logs/Masq'
如果一切正常,运行 masq --install-system
来安装系统 DNS 配置文件(需要 root 权限):
$ sudo masq --install-system
最后运行 DNS 服务器:
masq
现在,试着 ping 任何以 .dev 结尾的地址,应该返回的 IP 地址是 127.0.0.1:
$ ping example.dev
PING example.dev (127.0.0.1): 56 data bytes
运行守护进程
生产守护进程配置文件:
$ masq --install-local
然后:
launchctl load ~/Library/LaunchAgents/cx.masq.masqd.plist
参考链接
- Pow - Zero-configuration Rack server for Mac OS X
- Serving Apps Locally with Nginx and Pretty Domains
- Using Dnsmasq for local development on OS X
- 通过 Nginx 给本地应用取个漂亮域名
Nuxt.js+express该如何部署
我最近决定上线一个Vue SSR项目,使用的是Nuxt.js+express+mysql,代码已经有个样子了,于是决定到线上跑一下! 我是这样构想的: 将项目在Linux上跑起来(使用PM2),使用Nginx将80端口代理到node端口上! 我遇到了以下问题: 在我的电脑本地,使用以下命令可以正常运行:
npm run build
npm start
但是使用pm2时确跑不起来,这是脚本:
pm2 start npm --name 'justyeh' -- start
错误日志里面包含了许多这样的信息:
D:\NODEJS\NPM.CMD:1
(function (exports, require, module, __filename, __dirname) { :: Created by npm, please don't edit manually.
^
SyntaxError: Unexpected token :
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Object.<anonymous> (C:\Users\yeh\AppData\Roaming\npm\node_modules\pm2\lib\ProcessContainerFork.js:53:21)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
我在纠结的是部署的思路是否正确,如果错了,大家能否为我提供一个思路; 如果这样思路是对的,如何解决这个问题?
Promise是Monad吗?
译者按:近年来,函数式语言的特性都被其它语言学过去了。
原文: Functional Computational Thinking — What is a monad?
译者: Fundebug
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。
如果你使用函数式编程,不管有没有用过函数式语言,在某总程度上已经使用过Monad。可能大多数人都不知道什么叫做Monad。在这篇文章中,我不会用数学公式来解释什么是Moand,也不使用Haskell,而是用JavaScript直接写Monad。
作为一个函数式程序员,我首先来介绍一下基础的复合函数:
const add1 = x => x + 1
const mul3 = x => x * 3
const composeF = (f, g) => {
return x => f(g(x))
}
const addOneThenMul3 = composeF(mul3, add1)
console.log(addOneThenMul3(4)) // 打印 15
复合函数composeF
接收f
和g
两个参数,然后返回值是一个函数。该函数接收一个参数x
, 先将函数g
作用到x
, 其返回值作为另一个函数f
的输入。
addOneThenMul3
是我们通过composeF
定义的一个新的函数:由mul3
和add1
复合而成。
接下来看另一个实际的例子:我们有两个文件,第一个文件存储了第二个文件的路径,第二个文件包含了我们想要取出来的内容。使用刚刚定义的复合函数composeF
, 我们可以简单的搞定:
const readFileSync = path => {
return fs.readFileSync(path.trim()).toString()
}
const readFileContentSync = composeF(readFileSync, readFileSync)
console.log(readFileContentSync('./file1'))
readFileSync
是一个阻塞函数,接收一个参数path
,并返回文件中的内容。我们使用composeF
函数将两个readFileSync
复合起来,就达到我们的目的。是不是很简洁?
但如果readFile
函数是异步的呢?如果你用Node.js
写过代码的话,应该对回调很熟悉。在函数式语言里面,有一个更加正式的名字:continuation-passing style 或则 CPS。
我们通过如下函数读取文件内容:
const readFileCPS = (path, cb) => {
fs.readFile(
path.trim(),
(err, data) => {
const result = data.toString()
cb(result)
}
)
}
但是有一个问题:我们不能使用composeF
了。因为readCPS
函数本身不在返回任何东西。
我们可以重新定义一个复合函数composeCPS
,如下:
const composeCPS = (g, f) => {
return (x, cb) => {
g(x, y => {
f(y, z => {
cb(z)
})
})
}
}
const readFileContentCPS = composeCPS(readFileCPS, readFileCPS)
readFileContentCPS('./file1', result => console.log(result))
注意:在composeCPS
中,我交换了参数的顺序。composeCPS
会首先调用函数g
,在g
的回调函数中,再调用f
, 最终通过cb
返回值。
接下来,我们来一步一步改进我们定义的函数。
第一步,我们稍微改写一下readFIleCPS
函数:
const readFileHOF = path => cb => {
readFileCPS(path, cb)
}
HOF
是 High Order Function (高阶函数)的缩写。我们可以这样理解readFileHOF
: 接收一个为path
的参数,返回一个新的函数。该函数接收cb
作为参数,并调用readFileCPS
函数。
并且,定义一个新的复合函数:
const composeHOF = (g, f) => {
return x => cb => {
g(x)(y => {
f(y)(cb)
})
}
}
const readFileContentHOF = composeHOF(readFileHOF, readFileHOF)
readFileContentHOF('./file1')(result => console.log(result))
第二步,我们接着改进readFileHOF
函数:
const readFileEXEC = path => {
return {
exec: cb => {
readFileCPS(path, cb)
}
}
}
readFileEXEC
函数返回一个对象,对象中包含一个exec
属性,而且exec
是一个函数。
同样,我们再改进复合函数:
const composeEXEC = (g, f) => {
return x => {
return {
exec: cb => {
g(x).exec(y => {
f(y).exec(cb)
})
}
}
}
}
const readFileContentEXEC = composeEXEC(readFileEXEC, readFileEXEC)
readFileContentEXEC('./file1').exec(result => console.log(result))
现在我们来定义一个帮助函数:
const createExecObj = exec => ({exec})
该函数返回一个对象,包含一个exec
属性。
我们使用该函数来优化readFileEXEC
函数:
const readFileEXEC2 = path => {
return createExecObj(cb => {
readFileCPS(path, cb)
})
}
readFileEXEC2
接收一个path
参数,返回一个exec
对象。
接下来,我们要做出重大改进,请注意!
迄今为止,所以的复合函数的两个参数都是huan’hnh函数,接下来我们把第一个参数改成exec
对象。
const bindExec = (execObj, f) => {
return createExecObj(cb => {
execObj.exec(y => {
f(y).exec(cb)
})
})
}
该bindExec
函数返回一个新的exec
对象。
我们使用bindExec
来定义读写文件的函数:
const readFile2EXEC2 = bindExec(
readFileEXEC2('./file1'),
readFileEXEC2
)
readFile2EXEC2.exec(result => console.log(result))
如果不是很清楚,我们可以这样写:
bindExec(
readFileEXEC2('./file1'),
readFileEXEC2
)
.exec(result => console.log(result))
我们接下来把bindExec
函数放入exec
对象中:
const createExecObj = exec => ({
exec,
bind(f) {
return createExecObj(cb => {
this.exec(y => {
f(y).exec(cb)
})
})
}
})
如何使用呢?
readFileEXEC2('./file1')
.bind(readFileEXEC2)
.exec(result => console.log(result))
这已经和在函数式语言Haskell里面使用Monad几乎一模一样了。
我们来做点重命名:
- readFileEXEC2 -> readFileAsync
- bind -> then
- exec -> done
readFileAsync('./file1')
.then(readFileAsync)
.done(result => console.log(result))
发现了吗?竟然是Promise!
Monad在哪里呢?
从composeCPS
开始,都是Monad.
readFIleCPS
是Monad。事实上,它在Haskell里面被称作Cont Monad;exec 对象
是一个Monad。事实上,它在Haskell里面被称作IO Monad。
Monad 有什么性质呢?
- 它有一个环境;
- 这个环境里面不一定有值;
- 提供一个获取该值的方法;
- 有一个
bind
函数可以把值从第一个参数Monad
中取出来,并调用第二个参数函数
。第二个函数要返回一个Monad。并且该返回的Monad类型要和第一个参数相同。
数组也可以成为Monad
Array.prototype.flatMap = function(f) {
const r = []
for (var i = 0; i < this.length; i++) {
f(this[i]).forEach(v => {
r.push(v)
})
}
return r
}
const arr = [1, 2, 3]
const addOneToThree = a => [a, a + 1, a + 2]
console.log(arr.map(addOneToThree))
// [ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 5 ] ]
console.log(arr.flatMap(addOneToThree))
// [ 1, 2, 3, 2, 3, 4, 3, 4, 5 ]
我们可以验证:
- [] 是环境
- []可以为空,值不一定存在;
- 通过
forEach
可以获取; - 我们定义了
flatMap
来作为bind
函数。
结论
Monad是回调函数
? 根据性质3,是的。回调函数式Monad
? 不是,除非有定义bind
函数。
欢迎加入我们Fundebug的全栈BUG监控交流群: 622902485。
版权声明: 转载时请注明作者Fundebug以及本文地址: https://blog.fundebug.com/2017/06/21/write-monad-in-js/#more
老生常谈,异步 + 循环
var fs = require('fs');
var files = ['./files/a', './files/b', './files/c'];
for (var i = 0; i < files.length; i++) {
fs.readFile(files[i], 'utf-8', function(err, contents) {
console.log(files[i] + ': ' + contents);
});
}
// undefined: aaaaaaaa
// undefined: bbbbbbbb
// undefined: cccccccc
for (let i = 0; i < files.length; i++) {
fs.readFile(files[i], 'utf-8', function(err, contents) {
console.log(files[i] + ': ' + contents);
});
}
// ./files/a: aaaaaaaa
// ./files/b: bbbbbbbb
// ./files/c: cccccccc
files.forEach(function(element, i) {
fs.readFile(element, 'utf-8', function(err, contents) {
console.log(files[i] + ': ' + contents);
});
});
// ./files/a: aaaaaaaa
// ./files/b: bbbbbbbb
// ./files/c: cccccccc
爬虫程序的一点小问题,求帮助~~
var https = require(‘https’); var cheerio = require(‘cheerio’); var url = ‘https://movie.douban.com/chart’;
function filter(html) { var $ = cheerio.load(html); var lists = $(’.indent’).find(‘table’); var movies = []; lists.each(function (item) { var movie = $(this); var movieName = movie.find(‘a’).text(); var star = movie.find(’.rating_nums’).text(); var movieData = { movieName: movieName, star: star } console.log(movieData.movieName+movieData.star) }) }
https.get(url, function (res) { var html = ‘’; res.on(‘data’, function (data) { html += data; }) res.on(‘end’, function () { filter(html); }) })
输出结果为: 显示的结果缩进好奇怪啊,是怎么回事?
听说node 8.x不是支持async/await了,运行需要什么配置参数吗?
直接运行仍然报错,姿势错误?是需要加什么参数启动吗?
爬虫数据可以写入txt文件,但不能写入excel中?
这样写是可以的: function printItemInfo(itemInfo) { var ws = fs.createWriteStream(‘stradewVallry.txt’,‘utf-8’); itemInfo.forEach(function (item) { var name = item.name; var source = item.source; var recipe = item.recipe; ws.write(’【’ + name + ‘】’ + ‘【’ + source + ‘】’ + ‘【’ + recipe + ‘】’ + ‘\r\n’); console.log(’【’ + name + ‘】’ + ‘【’ + source + ‘】’ + ‘【’ + recipe + ‘】’ + ‘\n’); }); ws.end(); } 但如果想导入excel中,直接改成: var ws = fs.createWriteStream(‘stradewVallry.xslx’,‘utf-8’); 好像就不行了。 想导入excel中应该怎么做??
【杭州 / 北京】蚂蚁金服招聘资深前端开发工程师
简介: 我们是蚂蚁金服财富事业群,负责的主要产品是蚂蚁聚宝,现在叫蚂蚁财富。有支付宝内的业务,也有独立的 app。
P6及以上职位基本要求就三点:
- 一年以上前端工作经验
- 熟悉移动端 H5 开发
- 有过 Node.js 开发
待遇什么的我不知道哈
招聘部门:蚂蚁金服-财富事业群-财富无线事业部 招聘地点:杭州、北京
有兴趣的同学请给我简历: daniel.ld@antfin.com
formidable 如何禁止某些格式文件上传?
如题 在学习这个库的时候如果我提前指定了 上传路径如 form.uploadDir = ‘/public/data’; 虽然我后面check了上传文件的格式并且在页面提示了错误,但是文件还是会上传上去,我该如何做?
后端程序放在腾讯云服务器中后无法在后端中发起https请求
链接1:http://181.235.252.128:3000/userInfo/testRequestHttps
链接2:https://tcircling.com/userInfo/testRequestHttps
181.235.252.128是我的服务器地址,tcircling.com是服务器的域名
目的:最终是要用链接2链接到后端发起https请求获取数据
问题描述: 因工作需求,我需要在我的后端中发起https请求微信端的api获取数据,链接1和链接2都是路由到以下testRequestHttps函数。奇怪的是用链接1请求数据能请求成功,而用链接2请求却请求失败,请问这是什么原因呢?我的后端是放在腾讯云服务器中的,请问是缺少什么没有配置吗?
testRequestHttps:function(req,res,next){ var url = “https://www.baidu.com”; request(url, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); res.json(body); } }); }
这么多年过去了!
社区的搜索一直搜索不到东西。。。。。
在学习jquery Ajax时遇到了一个问题
JQuery 权威指南 第二版 第六章在讲Ajax时先讲了 &传统的JavaScript方法实现Ajax功能& 的例子,然后我运行实例,发现并不能得到他说的结果,书中原代码: <head> <title>传统的JavaScript方法实现Ajax功能</title> <style type=“text/css”> body{font-size:13px} .divFrame{width:260px;border:solid 1px #666} .divFrame .divTitle{padding:5px;background-color:#eee} .divFrame .divContent{padding:8px} .divFrame .divContent .clsShow{font-size:14px} .btn {border:#666 1px solid;padding:2px;width:80px; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff, EndColorStr=#ECE9D8);} </style> <script type=“text/javascript”> var objXmlHttp = null; //声明一个空的XMLHTTP变量 function CreateXMLHTTP() { //根据浏览器的不同,返回该变量的实体对象 if (window.ActiveXObject) { objXmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”); } else { if (window.XMLHttpRequest) { objXmlHttp = new XMLHttpRequest(); } else { alert(“初始化XMLHTTP错误!”); console.log(‘sss’); } } } function GetSendData() { document.getElementById(“divTip”).innerHTML = “<img alt=’’ title=‘正在加载中…’ src=‘Images/Loading.gif’ />”; //初始化内容 var strSendUrl = “b.html?date=”+Date(); //设置发送地址变量并赋初始值 CreateXMLHTTP(); //实例化XMLHttpRequest对象 objXmlHttp.open(“GET”, strSendUrl, true); //open方法初始化XMLHttpRequest objXmlHttp.onreadystatechange = function() { //回调事件函数 if (objXmlHttp.readyState == 4) { //如果请求完成加载 if (objXmlHttp.status == 200) { //如果响应已成功 //显示获取的数据 document.getElementById(“divTip”).innerHTML = objXmlHttp.responseText; } } } objXmlHttp.send(null); //send发送设置的请求 } </script> </head> <body> <div class=“divFrame”> <div class=“divTitle”> <input id=“Button1” type=“button” onclick="GetSendData()" class=“btn” value=“获取数据” /> </div> <div class=“divContent”> <div id=“divTip”></div> </div> </div> </body>
b.html 是在同级目录下, 我用的浏览器是 chrome, 然后控制台没有任何错误提示,不过我在 if (objXmlHttp.readyState == 4) 打断点查看 发现objXmlHttp.readyState 是2,objXmlHttp.status是 0,虽然不影响下面的jquery方法的学习,但还是想了解下传统方法这样写哪里有问题?
cnode代码格式化建议
看到很多同学在论坛上发代码都没格式化,直接复制粘贴代码格式惨不忍睹。其实很简单,用markdown语法就好了:
```js function foo() { // code there… } ```
效果:
function foo() {
// code there...
}
记得格式化一下代码,节约别人的时间,也是节约自己的时间。
在阿里云上部署企业级NodeJS应用的方法或教程?
各位好,我们是一家全栈JS的小公司,目前后端都是Node。之前一直用的是LeanCloud的云引擎服务,使用起来很简单,只需要在他们的后台点“部署”,LeanCloud就会自动拉取我们github上的代码,完成部署。
不过,我们现在准备弃用LeanCloud了,因为感觉这家公司很不地道,未来估计会越来越坑。(现在逼着我们必须花900块钱才能做一个域名转入的操作,不转就可能被下线,明明是他们应该免费提供的功能,就是卡着你不让你弄,所以觉得很不靠谱)
我们准备自己买ECS搭环境,但是总感觉心里没谱,有很多点不知道该怎么做,比如什么负载均衡、自动重启、自动部署、可以回滚之类的。一时间不知道如何下手。在网上找资料也没有找到能满足“企业级”要求的教程,都是开发者自己玩玩的搭建过程。
请问,哪里可以找到这样的资料?多谢
PS:听说Docker很不错,我们也有学习的意愿,但是也找不到非常合适的教程。我们需要的是企业级的,不是入门学习那种的。
Express中间件向下传递数据的问题
想利用中间件机制来降低回调嵌套的数量,就想到用中间件
将数据绑定在向下传递的参数req,res中,其他路由是获取不到的,是否可以放心使用?
app.use('/login',check_one,check_two)
check_one(req,res,next){
model.findOne()
.then((data)=>{
// 将其绑定在向下传递的参数中req,res均可,其他路由是获取不到的,是否可以放心使用?
req.mydata=data
});
}
check_two(req,res){
console.log(req.mydata)
}
不知道这样的写法是否正确?
koa-router怎么动态加载数据库路由
我想用koa-router加载数据库中查询出来的路由,发现中间件是同步的。 index.js
const routers = require('./middlewares/router')
// 加载路由中间件
app.use(routers());
router.js
module.exports = function (dir) {
let
controllers_dir = dir || 'routers',
router = require('koa-router')();
addRouters(router, controllers_dir); // 这是加载写好的路由
// 动态添加数据库菜单路由
// var menus = await menu.getMenus();
// for(let i=0;i<menus.length;i++){
// if(menus[i].model == 'categories'){
// router.get(menus[i].url, category);
// }
// }
return router.routes();
};
看注释部分,我知道这里不能用await,但是我写成回调的话(下面这样),不会进异步,请问该怎么解决
menu.getMenus().then(function(menus){
for(let i=0;i<menus.length;i++){
if(menus[i].model == 'categories'){
router.get(menus[i].url, category);
}
}
return router.routes();
})
ERR_CONTENT_LENGTH_MISMATCH 上传图片到服务器出错.
本地启服务测试,没问题. 将代码更新到服务器(centOS6.8)之后. 测试图片上传.报这个错: ERR_CONTENT_LENGTH_MISMATCH 处理请求的代码: try{ var imgData = req.body.headPortrait; var userId = req.body.userId;
var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = new Buffer(base64Data, 'base64');
//将buffer写成文件,文件名如果重名的话.则会覆盖
fs.writeFile('./public/uploads/headPortrait'+userId+'.jpg',dataBuffer,function(err){
console.log(err);
});
var user = userService.updateUser({'headPortrait':'/uploads/headPortrait'+userId+'.jpg'},userId);
console.log(user.get({'plain': true}));
return res.json("上传成功!");
}catch(e){
return res.json("错误信息:"+e.description );
}
代码意思是.将传过来的的图片转成buffer然后存入指定的目录 再调用自己定义的userService.updateUser()方法,存入数据库. 我在网上查询了下这个错误.说可能是 用户/目录权限的问题. 但是没有找到解决方案. 前不久才开始玩centOS的.这方面不是很懂. 麻烦各位大大,看下可能的解决问题的方法.
vue2.x全家桶+nodeJs+mongodb实现学校老师考勤应用
record
使用vue全家桶(vue2.x + vue-router + vue-resource + vuex) + nodeJs + mongodb开发的学校老师上课考勤应用
项目地址
说在前面
初学vue配合后台语言开发的时候,完全不知从何下手,网上的Demo更是少之又少。经过一段时间的学习积累,总算掳清vue单页面与服务器的关系,碰巧实训课程也有vue配合后台开发的要求,于是就动手做这个项目。
运行项目
# 先在你的电脑安装mongodb数据库,然后启动数据库
mongod --dbpath=f:\mongodb\db
# 进入到项目文件,安装依赖包
npm install
# 运行nodeJs服务器
npm start
# 运行项目
npm run dev
使用技术
vue2.x
+
vue-router
+
vuex
+
vue-resource
+
vue-cli
+
scss
+
node.js
+
express
+
mongodb
+
async
+
es6
部分截图
登录注册
导入csv文件,登记缺勤学生,查看缺勤学生
项目布局
.
├── api // 服务器逻辑处理
├── build // webpack配置文件
├── config // 项目打包路径
├── src // 源码目录
│ ├── components // 组件
│ │ ├── common // 公共组件
│ │ ├── calendar.vue // 日历组件
│ │ ├── check_work.vue // 查看缺勤组件
│ │ ├── cls_call.vue // 登记缺勤组件
│ │ ├── import_roster.vue // 导入组件
│ │ ├── login.vue // 租金组件
│ │ ├── register.vue // 注册组件
│ │ ├── restor.vue // 列表组件
│ │ ├── select_cls.vue // 选择班级组件
│ │ ├── select_restor.vue // 查看班级组件
│ ├── router
│ │ └── index.js // 路由配置
│ ├── store // vuex的状态管理
│ │ ├── index.js // 引用vuex,创建store
│ │ ├── modules // store模块
│ │ └── mutations.js // 配置mutations
│ └── style
│ ├── common.scss // 公共样式文件
│ ├── mixin.scss // 样式配置文件
│ └── swiper.min.css
│ └── App.vue // 页面入口文件
├── static // 静态资源
│ ├── css // css文件
│ ├── file // 上传的csv文件
│ ├── fonts // 字体图标
├── index.html // 入口html文件
.
在学习jquery Ajax时遇到的又一个问题
用 get方法去请求aspx文件中的数据,得不到想要的结果: script 部分: <script type=“text/javascript”> $(function() { $("#Button1").click(function() { //按钮单击事件 //打开文件,并通过回调函数返回服务器响应后的数据 $.get(“UserInfo.aspx”, { name: encodeURI($("#txtName").val()) }, function(data) { $("#divTip") .empty() //先清空标记中的内容 .html(data); //显示服务器返回的数据 }) }) }) </script>
aspx文件:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
<% string strName = System.Web.HttpUtility.UrlDecode(Request[“name”]);//解码姓名字符 string strHTML = “<div class=‘clsShow’>”; //初始化保存内容变量 if (strName == “陶国荣”) { strHTML += “姓名:陶国荣<br>”; strHTML += “性别:男<br>”; strHTML += “邮箱:tao_guo_rong@163.com<hr>”; } else if (strName == “李建洲”) { strHTML += “姓名:李建洲<br>”; strHTML += “性别:女<br>”; strHTML += “邮箱:xiaoli@163.com<hr>”; } strHTML += “</div>”; Response.Write(strHTML); %> 想读其中的一条数据,结果通篇返回,谁能帮解答下错误在哪?