2018年1月22日
欢迎来到的Altaba的博客
众所周知node是打破前端壁垒最快捷的途径,项目开发中需要写一个nodejs+express+mongodb记录浏览网页的信息,但是由于公司前期未计划到这步,所以有些数据需要调用后端同事的api把一些MongoDB数据实时传入后台,故我这边nodejs中要不定时的做ajax请求调用外部的api(非nodejs API),实现如下:
利用nodejs固有的“http”模块中request()方法
//对比联系人创建时间和当前时间差在两分钟内
let screenLandContacts = function (data) {
//let now = new Date();
let newData = [];
let preTime = new Date().getTime();
data.forEach((item)=> {
// console.log(item.createtime);
// console.log(preTime);
let initTime = preTime - item.createtime;
// console.log(initTime);
if(initTime < 120000){
newData.push({
skey:item.skey,
contact_info:item.contact_info
})
}
});
return newData;
}
//获取所有登录的联系人信息
let searchLandContacts = function () {
contactDB.findAll().then((data)=> {
let newData = screenLandContacts(data);
//let newDataL = JSON.stringify(newData);
// let postData = querystring.stringify({
// 'contacts' : newData ? newData : '[]'
// });
let postData = {
contacts : JSON.stringify(newData)
};
let options = {
hostname: 'rest_t.soup.ai',
//port: 80,
path: '/contact/online',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(formatParams2(postData))
}
};
let req = nodeHttp.request(options, (res) => {
//console.log(`STATUS: ${res.statusCode}`);
//console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
// write data to request body
console.log(postData);
//格式化参数
req.write(formatParams2(postData));
req.end();
}, (err)=> {
dbLog.error('find contact error: ' + err);
});
};
//循环发送
let sendWsMessage = function () {
setInterval(function () {
searchLandContacts();
},15000)
};
sendWsMessage();