1.求node.js 结合ajax 的完整实例 2.页面的参数怎样从前端传递到node.js后端进行处理(除了用表单提交,然后后端用req.body.xx提取之外) 例如若demo是个连接的话,连接demo页面会跳转,但怎样将demo这个值传回后端,进行相关处理了?
var req = new XMLHTTPRequest();
req.onload = function () {
console.log(req.status); // 响应码
console.log(req.responseText); // 响应字符
};
req.open('POST', true);
req.setRequestHeader('请求头名', '请求头值');
req.send('HTTP请求体字符');
JSON.parse(STRING) => OBJECT
JSON.stringify(OBJECT) => STRING
客户端和服务器通信,本身是tcp-http。nodejs只不过是实现tcp-http,然后提供接口编程罢了。
这个接口就是
- req.headers 看请求头
- req.on(‘data’) 请求事件
- res.writeHeader() 写响应头
- res.write() 写响应体
前端ajax的接口就是:XMLHTTPRequest的实例ajax
- ajax.status 看响应码
- ajax.responseText 看响应体
- ajax.onload 响应事件
- ajax.open() 请求方法
- ajax.setRequestHeader() 请求头
- ajax.send() 请求体
前端用的是jquery,请求代码如下:
$.ajax({
type: 'GET',
dataType: 'html',
url: '/views/main.html',
data: { type: "getself",username:getCookie("username")},
success: function (data) {
$("#user_msg").append(data);
},error:function(XMLHttpRequest, textStatus, errorThrown){
console.log(XMLHttpRequest.status);
console.log(XMLHttpRequest.readyState);
console.log(textStatus);
}
});
这里的url 写的是/views/main.html.这里的/views 指向的是我项目根目录下的views 文件夹(后台要配置一下) 然后后端相应请求的代码
app.post('/views/main.html',function(req,req){
//执行逻辑;
});
也可以这样写,把回调函数封装起来
app.post('/views/main.html',user.list);
user.list 是我user.js 下的list 方法
之前有提到 后台配置一下的问题 我的配置如下
app.engine('.html', ejs.__express);
app.set('view engine','html');
app.set('views',__dirname+"/views");
app.set('view option',{layout:false});
你的问题完全是因为你还没了解nodejs。错应该说还没了解后端语言的机制。用不用表单不是”后端“决定,而且前端使用什么方式,AJAX就是解决form的问题。 但你的问题说是demo判断连接其实和form应该没太多关系,如:<a href="/user?username=2b"/>用户姓名</a>这个连接是连接到一个"/user"的路由连接。带了一个username参数 后端获取: app.get(‘/user’,function(req,res){ var username = req.query.username <–后段取得username的值"2b" if(username==’2b’){ res.send(‘恭喜通过2b测试’) //下一步执行的 }else{ res.redirect(‘/’) //返回刚才的页面 【"/"路由是首页】 } })
@xiaxiaokang 自己通过写实例,对这套机制已经了解。 点击demo连接跳转,只要在node用app.ge获取demo的href内容即可,然后由于是app.get操作;获得参数可用req.params.xx; 例如demo的链接href="/demo/username" 那么app.get('/demo/:username’,function(req,res){ var username = req.params.username; … }); 是这样的吧!
@kingche 没错,,当日你也可以选择参数方式看你自己喜欢, 参数:username这种用不好就会和路由混乱 如 路由demo/xxxx 都属于demo/:username的范围 我比较习惯用参数。。