记录下做项⽬(在线考试系统)遇到的问题
记录下做项⽬遇到的问题
1.使⽤post提交url不隐藏参数的问题
注册功能,表单采⽤ajax提交时。指明post提交还是会出现url参数未隐藏。但是数据成功被提交到了数据库。
排查发现是注册这个按钮的问题。
<button id="register">注册</button>
如果⽤a链接标签
<a href="javascript:;"  id="register">注册</a>
⼀切正常
为什么呢?因为button默认是type=sumbit,包括input提交按钮也是。如果类型为submit,那么点击时就会提交表单。所以将button标签或者input添加⼀个type属性,设置为button即可
ajax提交表单时,按钮类型应该是button,不能是submit。
2.引⼊bootstrap样式⽆效果
引⼊bootstrap路径正确通过127.0.0.1:3000/index.html发现⽆样式。本地⽂件打开正常。
查看控制台报错如下
Refused to apply style from 'localhost:3000/node_modules/bootstrap/dist/css/bootstrap.min.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
是因为通过npm安装的bootstrap安装到了node_modules⽂件夹下。⽽我在⼊⼝⽂件中启⽤静态资源,只是默认的public⽂件下。所以由于静态资源访问限制导致。
所以可以添加app.use(express.static(path.join(__dirname, 'node_modules')));
或者将bootstrap的⽂件拷贝到public下
smartswitchpc教程3.mysql多表的同步问题
CREATE <;触发器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <;表名> FOR EACH Row<;触发器主体>
创建插⼊触发器
create trigger studentInsert after insert
on user for each row
begin
INSERT INTO student(username,password)VALUES(new.username,new.password);
END;
反之亦然
create trigger userInsert after insert
jquery下载文件请求
on student for each row
begin
INSERT INTO user(username,password)VALUES(new.username,new.password);
END;
但是出现问题了。修改A表,B表可以同步。但是修改B表,A表不改变。⽽且还不能相互都加触发器。暂时不知道怎么解决
或者是设置连接字符串的配置时,添加属性multipleStatements: true。默认是关闭,只能执⾏⼀条。
今天想起来以前学的细节点的数据库内容。印象中和外键可能有关。有空查
4.⽂件引⼊顺序
在做数据列表渲染时。导jquery⽂件放在了js⽂件后。导致出错。
前期使⽤的json接⼝。在进⾏ajax请求时,⼀直路径不对。⽹上查,都是使⽤restful接⼝的。但是改了后还是不对,最后发现后台返回的设的标志位为2.也就是没影响到⾏数。去MySQL中查看,数据并未发⽣改变。将语句单独取出在MySQL中运⾏。神奇的是,个别能成功。个别不成功,这时候就会返回标志位为2。
报错如下[SQL]delete from student where username=sad [Err] 1054 - Unknown column 'sad' in 'where clause'
猜测是关键字或是字符格式问题,导致。
修改全为数字才成功。
但是⼜发现有⼏率出错。未解决
关于req.body、req.params、req.query
⾸先req.params,req.query是⽤在get请求当中,⽽req.body是⽤在post请求中的。
⽽req.params,req.query的区分粗略查了下没明确说明。有空查官⽅⽂档。
7.请求后服务器返回两次或者两次以上的响应
8.(⼤坑)⽂件下载的⽂件
postman插件测试正常。能得到⽂件。但是在进⾏前端渲染时。ajax请求会进⼊error。
通过表单⾥的按钮,可以第⼀次ajax请求通过id拿到存储的⽂件信息。但是在进⾏⼆次ajax时,会发现⼀直进⼊error。查看后台,发现⽂件名是拼接正确的。虽然中⽂会有编码错误导致路径不对⽽失败。但是纯英⽂的路径正确仍然是进⼊erro下载失败。
废了不少功夫,解决了。详细另开新篇。
9.(⼩坑)Failed to lookup view “/login.ejs” in views directory “views”
10.暂搁 sessionid在⽕狐的问题。
做完⽤户的状态后。测试发现。在⾕歌以及edge均⽆问题。⽽在⽕狐中出现情况就是登陆成功后,在点击跳转其他页⾯,就会被打回登陆页⾯。查看发现⽕狐不知道为什么访问其他页⾯先访问了登陆的虚拟路径。由于我设置当回到登陆页⾯将sessionid销毁,就会导致以上情况。其余浏览器正常。
11.使⽤jquery时.html()、.text()、.val()的不仔细
都知道这三种各有各的含义。
在做分页跳转时,将前台的点击的页数值获取传到后⾯。由于错误使⽤导致整体逻辑写完后驳回。再分⼀步步回顾时,发现ejs模板也是写错了⼀点。
应该⼀步步确保每步都确定得到⾃⼰想要的结果后,再往下。这次想⼀蹴⽽就就导致了问题。
get请求是使⽤req.params、req.query。 post请求是req.body
另外req.body是需要⽤到body-parser第三⽅中间件。
补充,如果是restful的put请求,也是req.body
<('students/student/:id',(req,res)=>{
})
所以是使⽤req.params正确获取到url参数。⽽在补充分页时,我写的
<('students/count',(req,res)=>{
})
所以这⾥应该是req.query。就是这个细节,导致第⼀次尝试的失败。好在排查也解决了
13.ajax异步⽂件上传
在开始,这个上传还是很简单的。只需要借助multer中间件就可以完成。使⽤的表单提交⽅式,但是问题还是来了。经测试,没有上传成功的提⽰普遍⽤户体验不良好。⾏吧,那就改ajax。
但是ajax表单提交也没那么简单。对于⽂件上传来说,有⼀个坑。最后查了许多资料。通过FormDate对象的使⽤解决了问题。
autoeventwireup14.(⼤坑)数据库操作顺序问题
今天在优化时,想要处理上传⽂件同步到数据的信息重复问题。做了个判断,先查已有的,如果重复就删除,然后再插⼊。但是在写完代码后,进⾏测试。发现了问题。
let filename = fileList[i].originalname
// console.log(filename);
let checksql ='select * from homework where filename=? and username=?';
let checkdata =[filename,username];
db.base(checksql,checkdata,(result)=>{
//有就删除注意这⾥之所以写重复是因为会将if条件外的先执⾏,再执⾏if⾥⾯的。也就是说先插⼊再删除。应该说是删除相应的db函数⾥的代码最后执⾏
if(result.length !=0){
// console.log('查到'+result.length+'条'+filename);
let deletesql ='delete from homework where filename=? and username=?';
let deletedata =[filename,username];
db.base(deletesql,deletedata,(result)=>{
//删除同username同filename数据
let sql ='insert ignore into homework set username=?,name=?,description=?,filename=?';
let data =[username,info.name,info.description,filename];
db.base(sql,data,(result)=>{
// console.log('删完了已有的'+filename+ '-----'+ filename +"插⼊数据库成功"+i);
})
})
let sql ='insert ignore into homework set username=?,name=?,description=?,filename=?';
let data =[username,info.name,info.description,filename];
db.base(sql,data,(result)=>{
// console.log(filename+ "插⼊数据库成功"+i);
})
})
matlab傅里叶变换图像增强
⼀开始⼤概是这样的。查到了,如果查到数量不为0,进⾏删除。然后插⼊。但是
问题来了,先插⼊再删除。他的执⾏顺序,调⽤删除的封装好的操作数据库的函数⾥的语句是最后执⾏。
javabean的目的是
遇到这么个情况,下⾯的input和前⾯的⽂字都是正常。设置相同的样式。⽽第⼀个textare⽂本域发现他前⽅的⽂字与⽂本域不对齐。导致⽆法居中效果。
⽽且查看下⾯input标签与textare标签的距离发现。除了⾃⾝的⾼度和margin,还有⼀层不知出处的空⽩区域。⽽控制台看到的元素盒⼦也并⽆此区域。
qbytearray和数组
再查看正常的input标签。⾃⾝的⾼度和margin上就是上⼀个input标签⽽⽆空⽩区域。⽽且已经清除了默认的margin和padding
想到⼀种可能,和图⽚容易遇到的问题⼀样,垂直对齐是基线对齐了。⽽前⽅的⽂字也是因此掉了下去。设置vertical-align:bottom;
解决。
16.twbs-pagination 条件查询的分页问题
主要遇到两个问题。
第⼀个是由于我是点击后获取到查询的依据类别type。⽽由于它定义在函数中,是个局部变量。虽然可以成功获取到当前类别的分页总数。但是,点击后,⽆法分页渲染列表。经过⼀段段的调试,发现时渲染时的type是undefined。需要定义为全局变量,才可以在加载页⾯数据的initTypeList(page)中得到type值。
$('#page2').twbsPagination({
totalPages: sult/pageSize),
visiblePages:5,//可见页码
first:'⾸页',
next:'下⼀页',
prev:'上⼀页',
last:'尾页',
onPageClick:function(event, page){
initTypeList(page);
}
});
第⼆个,当点击后,第⼀次成功。第⼆次点击其他条件页⾯⽆变化。控制台发现第⼆次并没有进⼊到上⾯的代码段中。其实是涉及到动态设置页数以及页⾯初始化,分页插件的总页数更改。需要先将原来的destory。才可以实现刷新或重绘。否则加载页⾯数据onPageClick的函数并没有进⼊,也就没有initTypeList(page);
可以通过两个简单的步骤来完成。
先调⽤destroy⽅法,然后使⽤新选项对其进⾏初始化。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。