模板渲染

node.js 2020-11-05 943

服务端请求的流程一般都是,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('服务器启动成功...');
});

 

标签:node.js

文章评论

评论列表

已有0条评论