Tôi có một khung nhìn logic trong tệp mẫu ngọc bích của tôi. Làm thế nào tôi có thể vượt qua mô hình để ngọc và nhận được html để gửi thêm qua email?Làm thế nào để biên dịch tập tin mẫu ngọc bích để có được chuỗi?
Trả lời
Bạn có thể thử như sau:
var jade = require('jade'),
fs = require('fs');
fs.readFile('template.jade', 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
var fn = jade.compile(data);
var html = fn({name:'Oleg'});
console.log(html);
});
đâu template.jade
là con đường cho mẫu của bạn. Và nó trông giống như sau:
!!!
html
head
title= 'Hello world'
body
p Hello #{name}!
Vì vậy, bạn chuyển mô hình của mình làm đầu vào của hàm fn() và đầu ra của nó sẽ là html.
<!DOCTYPE html><html><head><title>Hello world</title></head><body><p>Hello Oleg!</p></body></html>
Ngoài ra bạn có thể nắm bắt những chuỗi từ làm cho callback (thể hiện ví dụ)
exports.test1 = function(req, res){
res.render('test1', { title: 'test1' }, function(err, body) {
console.log(body);
});
res.send('wooo');
};
test1.jade
div
= title
p hello world!
Những câu trả lời tất cả các công việc cho tải mẫu ngọc bích và biên dịch nó để HTML sử dụng người dân địa phương. Tuy nhiên nếu bạn đang gửi email HTML, bạn cần lưu ý rằng hầu hết các máy khách đều loại bỏ tất cả các lớp CSS. Sử dụng Juice (hoặc một cái gì đó giống như nó) để áp dụng tất cả các lớp CSS nội tuyến.
Mở mẫu với fs.readFile()
không còn cần thiết nữa. API Jade bao gồm phương thức compileFile()
biên dịch trực tiếp từ tệp.
var jade = require("jade");
var locals = {name: "Linus"},
render = jade.compileFile('template.jade'),
html = render(locals);
Phương thức Jade API cũng bao gồm phương thức renderFile()
trả về trực tiếp chuỗi html từ một tệp nhất định, làm cho nó trở nên đơn giản hơn.
var jade = require("jade");
var locals = {name: "Linus"},
html = jade.renderFile('template.jade', locals);
Đúng. Đây là câu hỏi liên quan đến cách kiểm tra lỗi: http://stackoverflow.com/questions/7283896/how-can-i-catch-a-rendering-error-missing-template-in-node-js-using- express-js/34709515 # 34709515 – Wtower
phiên bản ngọc nào? renderFile của tôi (v1.2.0) mong đợi 3 đối số – akcasoy
@akcasoy Đây là các tài liệu mới nhất: http://jade-lang.com/api/. Mô tả 'renderFile()' nằm ở phía dưới cùng và hiển thị 2 đối số được yêu cầu. – Nocturno
Và tôi khuyên bạn nên https://github.com/andris9/Nodemailer để gửi email –
cảm ơn, tất cả mọi thứ hoạt động hoàn hảo –
Bạn có thể sử dụng [app.render] (http://expressjs.com/api. html # app.render) để hiển thị mẫu cho chuỗi, như được đề cập trong [this] (http://stackoverflow.com/questions/15403791/in-express-js-app-render-vs-res-render-whats -the-difference # answer-15404507) câu trả lời gần đây hơn. –