2013-05-29 80 views
0

我想使用JavaScript重定向到一個文件index.jade,但它不適用於document.location.href =「index.jade」,所以我該怎麼辦? 這是我做過什麼:使用javascript重定向到一個玉石文件

SERVER:

app.get('/', function(req, res) { 
     fs.readFile(__dirname + '/login.html', 'utf8', function(err, text){ 
      res.send(text); 
     }); });  
    var io = require("socket.io").listen(server); 
    io.sockets.on('connection', function (socket) { 
    socket.on('login',function(data){ 
      console.log(data); 
      socket.emit('redirect_to_chat1'); 

     }); 
    }); 

客戶:

<script> 
$(document).ready(function() { 
var socket = io.connect('http://localhost:8080'); 
$('button#bd1').on({ click:function(e){ 
socket.emit('login',{username:$('#login').val(),password:$('#pass').val()}); 
socket.on('redirect_to_chat1', function(){ 
    document.location.href="index.jade"; 
}); 
}); 

</script> 

THX所有。

+0

有些要清楚的可以幫助你。 'send'是express模塊​​的一部分。這是一種更高層次的方法,意味着它爲您提供了一些東西,比如您不必擔心發送JSON,數字或文本。另外,'res.render()'是將內容傳遞給Jade的方法(表示默認模板庫),然後將其發送回客戶端。 –

+0

並檢查出這個問題:http://stackoverflow.com/questions/4529586/render-basic-html-view-in-node-js-express –

回答

1

不能重定向從客戶方index.jade。您需要重定向到由服務器處理的位置,並作爲響應,呈現index.jade文件並將其發送到客戶端。

// First, create an express server.. 
var express = require('express'); 
var app = express(); 

// Configure your server, make sure to put the correct paths 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
// You'll need express.session to manage logged in users. 
app.use(express.session({ 
    secret: "TOP SecerT", 
    store: new require('connect')() 
})); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

// Now manage your routes.. 
// Instead of opening login.html using fs, just put your main content to the index.jade 
// and render it as follows... 

// For all the requests, if the user is not logged in, redirect to '/login' 
app.use(function(req, res, next) { 
    if (! req.session.loggedIn) 
     return res.redirect('/login'); 
    next(); 
}); 
app.use('/', function(req, res, next){ 
    res.render('index.jade'); 
}); 

// Now, handle login requests here.. 
app.get('/login', function(req, res){ 
    // Assuming that you put your login code into a template called login.jade 
    res.render('login.jade'); 

    // OR if you don't have a login template just use res.sendfile('login.html'); 
}); 

// In your client side, you need to post the login credentials to the server, 
// and here's the handler for that. 
app.post('/login', function(req, res){ 
    // Check the user credentials. This is normally getting done by querying a db, but 
    // let's make it simple here. 
    if (req.param('username') == 'foo' && req.param('password') == 'bar') 
     req.session.loggedIn = true; 
}); 

// A simple handler for logout requests.. 
app.get('/logout', function(req, res){ 
    // This will delete all your session data... 
    req.session = null; 
}); 
+0

請你能給我一個例子,並告訴我在我的代碼服務器,我可以在哪裏使用它,因爲我想在重新定向後恢復用戶名和密碼值 – Yassine

+0

哦,thx很多爲您的幫助 – Yassine

0

。在你的應用程序的幾個問題:

  1. send不是node.js中的標準方法
  2. 當發送文件到客戶端,就沒有必要讀文件UTF8文字,剛讀它作爲緩衝區
  3. 有一個syntax error而從瀏覽器內運行下面的腳本。

所以才嘗試這個辦法:

<script> 
$(function() { 
    var socket = io.connect('http://localhost:8080'); 
    $('button#bd1').on({ click:function(e){ 
     socket.emit('login',{username:$('#login').val(),password:$('#pass').val()}); 
     socket.on('redirect_to_chat1', function(){ 
      location.href="index.jade"; 
     }); 
    }}); 
}); 
</script> 
+0

我試過了,但它不起作用 顯然我不能做到這一點在客戶端:/我不知道如何在服務器中執行 – Yassine

+0

首先,IT可以通過客戶端腳本重定向到另一個地址;然後,當客戶端沒有請求新頁面時,TI不可能向客戶端發送重定向。 – kyriosli

相關問題