服务端请求的流程一般都是,url解析出请求路径,根据请求+路径找对应函数,函数处理数据,数据填充模板,返回服务器。
在node.js中,模板引擎很多,这里使用art-template演示
渲染函数,特别注意node.js中很多方法都是异步的,模块导出时,调用经常得不到数据或者undefined。
// 封装一个渲染函数
var template = require('art-template'); // 导入art-template模板
var fs = require('fs'); // 导入文件操作模块
// 同步
var template = require('art-template');
var fs = require('fs');
var render = function (file_path, options) {
// 同步版本,readFileSync同步读文件
// 同步版本
try {
var data = fs.readFileSync(file_path);
var ret = template.render(data.toString(), options);
} catch (e) {
return e.toString();
}
return ret;
};
// 异步,需要借助Promise
var render = function (file_path, options) {
// 异步版本
return new Promise((resolve, reject) => {
fs.readFile(file_path, function (err, data) {
if (err) {
console.log('读取失败');
reject('读取失败');
}
var ret = template.render(data.toString(), options);
resolve(ret.toString());
});
})
};
exports.render = render; // node中导出模块:module.exports=xxxx;exports.xx = yy;
请求调用
// 加载http 模块
let http = require('http');
let server = http.createServer();
server.on('request', function (request, response) {
console.log('收到客户端请求');
console.log('请求路径', request.url);
if (request.url === '/') {
response.setHeader('Content-Type', 'text/html;charset=utf-8');
// response.end(JSON.stringify({a:'b'}))
var r = require('./操作模板引擎.js');
// 异步
var x = r.render('./test.html', {name: '66'}).then(ret => {
// console.log(ret);
response.end(ret);
});
// 同步
response.end(r.render('./test.html', {name: 'ddd'}))
}
});
// 绑定端口号,启动服务器
server.listen(8000, function () {
console.log('服务器启动成功...');
});
评论列表
已有0条评论