Contents 整体思路 跨域访问问题 Jquery.post()回调函数不执行问题 总结
Contents
最近想给毕设加入一个前端界面来调用后台的一些功能,这样展示性更好。我使用BootStrap,Jquery写了一个很简陋的前端界面。服务器端使用Node.js express框架开了接口。之前以为是挺简单的一个东西,因为这些代码网上应该有很多可以参考。然而这个过程中,踩了不少的坑,花了3天时间,才把基本流程调通...记录一下我踩过的坑。
我的需求是: 调用后台的Nodejs接口,进行增删查改操作,并向前端返回操作结果。由于我对于前后端的了解非常的肤浅,所以就选择了自己听说过的几个框架来写:
代码实现: 那么根据我的需求,参考了一系列教程/博客,我抄来写的代码如下
var express = require('express'); var path = require('path') var bodyParser = require('body-parser'); var app = express(); app.use(bodyParser.urlencoded({extended : false}));//这是一个中间件,用于解析请求内容 var SaveData = require("./SaveData.js"); var OffChainDB = require("./OffChainDB.js"); app.use(express.static(path.join(__dirname, '../privacy_frontend')));//设置静态文件中间件,在../privacy_frontend下包含我的前端html文件 app.post('/savedata',function(request,response){ console.log(request.body);//打印request的json内容 var result = SaveData.SaveData();//调用接口,作用是向数据库插入数据,返回一个Promise对象,并携带着数据库返回的消息 result.then(r => { console.log('success', r) str = JSON.stringify(r) response.json(str) }).catch(e => { console.log('error', e) }) }) var server = app.listen(3000,function(){//监听3000端口,这样浏览器直接访问IP:3000就可以访问到上面开的接口了 var host = server.address().address; var port = server.address().port; console.log("app listening at port 3000"); }) process.on('unhandledRejection',function(err){//绑定对于unhandleRejection的回调函数,报错 console.error(err.stack); }); process.on('uncaughtException',console.error);//跟上一句类似
链码 链码方法 数据类型 数据 保存数据
提交
之前听说过跨域访问这个名词,然而不知道具体是什么意思。这一次算是有了切身经验,理解了这个概念的含义。
我的nodejs后端运行在我的虚拟机linux上,而前端最开始放在我的本地windows里(为了方便调试)。然后发现发出的post请求怎么也收不到。
最后发现因为这是跨域请求。跨域请求的概念是:
解决方法
$.post()
$post
$.post().done().fail()