2012-06-25 38 views
5

Tôi muốn có thể gửi tin nhắn cho khách hàng bằng Express và EJS. Tôi đã xem xét tất cả và tôi vẫn không thể tìm thấy một ví dụ hoặc hướng dẫn. Ai đó có thể cho tôi biết cách dễ nhất để flash một tin nhắn?Làm cách nào để sử dụng req.flash() với EJS?

Cảm ơn!

Trả lời

2
<% if (message) { %> 
    <div class="flash"><%= message %></div> 
<% } %> 

Đây có phải là những gì bạn muốn không? Bạn có thể sử dụng một số JS phía máy khách để làm mờ dần. Ví dụ jQuery:

var message = $('.message'); 
if (message.length) { 
    setTimeout(function() { 
     message.fadeOut('slow'); 
    }, 5000); 
} 
+0

Điều này không hoạt động với 'req.flash()' theo như tôi có thể nói. –

1

req.flash() có thể được sử dụng theo hai cách.

Nếu bạn sử dụng hai đối

req.flash(type, message); 

nơi type là một loại tin nhắn và message là thông điệp thực tế (cả dây), sau đó nó sẽ thêm message vào hàng đợi của loại type. Sử dụng nó với một đối số

req.flash(type); 

trả về mảng của tất cả thư loại type và làm trống hàng đợi. Ngoài ra phương pháp này được đính kèm vào phiên, do đó, nó hoạt động trên mỗi phiên. Nói cách khác, mỗi người dùng có bộ hàng đợi flash riêng. Vì vậy, theo quan điểm của bạn, bạn có thể làm một cái gì đó như thế này:

var messages = req.flash('info'); 

và sau đó gửi các biến messages vào mẫu và sử dụng nó ở đó (lưu ý rằng messages là một mảng và bạn có thể lặp lại nó). Hãy nhớ rằng việc sử dụng req.flash('info', 'test'); sẽ thêm thông báo test loại infochỉ cho người dùng hiện tại (được liên kết với đối tượng req).

Hãy nhớ rằng cơ chế này khá yếu. Ví dụ: nếu người dùng nhấp đúp vào liên kết (hai yêu cầu gửi tới máy chủ), thì họ sẽ không thấy tin nhắn, vì cuộc gọi đầu tiên sẽ trống hàng đợi (tất nhiên trừ khi yêu cầu tạo thông báo).

+1

Điều này vẫn không cho tôi biết cách tôi hiển thị nó trong một mẫu (EJS). Tôi đã biết cách 'req.flash()' hoạt động. –

+0

Vì vậy, bạn không biết làm thế nào để sử dụng động cơ templating? Vậy tại sao bạn hỏi về 'req.flash()'? Điều này không có gì để làm với 'flash' sau đó. Bạn có biết cách vượt qua và sử dụng các biến trong EJS không? – freakish

+0

Tôi chưa từng nói điều đó. Ý tôi là, làm cách nào để hiển thị nó trong quan điểm của tôi? Và vâng, đã sử dụng Express + EJS cho các độ tuổi hiện nay. Chỉ cần không bao giờ phải sử dụng tin nhắn flash. Nó có một cái gì đó để làm với đèn flash, tôi muốn biết làm thế nào tôi hiển thị các tin nhắn flash trong quan điểm của tôi. –

0

Nếu bạn sử dụng mô-đun trợ giúp tin nhắn nhanh của visionmedia, nó trở nên rất đơn giản. Github link

Vì nó nói trong tài liệu của mô-đun:

Cài đặt module với NPM

npm install express-messages 

Sau đó bạn gán một helper năng động cho các tin nhắn trong ứng dụng.cấu hình:

app.dynamicHelpers({ messages: require('express-messages') }); 

Trong file EJS của bạn, chèn sau nơi bạn muốn tin nhắn của bạn

<%- messages() %> 

EJS renders này vào:

<div id="messages"> 
    <ul class="info"> 
    <li>Email queued</li> 
    <li>Email sent</li> 
    </ul> 
    <ul class="error"> 
    <li>Email delivery failed</li> 
    </ul> 
</div> 

(tất nhiên, bạn có thể thay đổi những gì nó hiển thị trong mã của mô-đun)

Sau đó, để thực sự flash một tin nhắn, hãy bao gồm một cuộc gọi đến:

req.flash('info', 'Your message goes here'); 
+0

Xin lỗi vì đã bình luận trên một bài đăng cũ, nhưng các tin nhắn nhanh hiện chỉ hoạt động với Express 2.x. –

4

Tôi biết đây là câu hỏi cũ, nhưng gần đây tôi đã tự mình tìm hiểu thông điệp và mẫu flash, vì vậy tôi hy vọng điều này sẽ giúp những người khác trong hoàn cảnh của tôi. Xem xét trường hợp của Express 4, mô-đun flash nhanh và mẫu ejs, dưới đây là 2 tuyến đường và mẫu sẽ giúp bạn bắt đầu.

Đầu tiên tạo thông báo flash bạn muốn hiển thị. Ở đây, phương thức app.all() sẽ là /express-flash. Yêu cầu baseurl/express-flash để tạo thông báo bằng cách sử dụng phương thức setter req.flash(type, message) trước khi được chuyển hướng đến baseurl/.

app.all('/express-flash', req, res) { 
    req.flash('success', 'This is a flash message using the express-flash module.'); 
    res.redirect(301, '/'); 
} 

Tiếp lập bản đồ thông điệp tới các mẫu trong phương pháp res.render() của tuyến đường mục tiêu, baseurl/. Ở đây phương thức getter req.flash(type) trả về thông điệp hoặc tin nhắn khớp với loại, success, được ánh xạ tới biến mẫu, expressFlash.

app.get('/', req, res) { 
    res.render('index', {expressFlash: req.flash('success') }); 
} 

Cuối cùng, hiển thị giá trị của expressFlash, nếu nó tồn tại, trong index.ejs.

<p> Express-Flash Demo </p>  
<% if (expressFlash.length > 0) { %> 
    <p>Message: <%= expressFlash %> </p> 
<% } %> 

Sau đó, khởi động máy chủ và truy cập baseurl/express-flash. Nó sẽ kích hoạt chuyển hướng đến baseurl/ bằng thông báo flash. Bây giờ làm mới baseurl/ và thấy thông báo biến mất.

+0

Để có giải thích đầy đủ hơn, [Tôi đã tạo một Gist bao gồm một readme thông tin về nhắn tin flash trong Express 4] (https://gist.github.com/brianmacarthur/a4e3e0093d368aa8e423 "Hai cách tiếp cận với nhắn tin flash trong Express 4"). Nó bao gồm hai phương pháp để nhắn tin flash, một cách sử dụng mô đun phiên làm việc một mình và một phương pháp khác sử dụng mô-đun flash nhanh.Nó cũng bao gồm các mẫu trong ejs, tay lái và ngọc bích. –

+0

Cảm ơn @Poison Oak sau nhiều giờ tôi mới nhận ra mình đã bỏ lỡ '=' trong '<% ='! đó là lý do tại sao tin nhắn của tôi luôn trống! – nacho4d

Các vấn đề liên quan