2016-08-14 10 views
1

Привет, я использую hapi и расширяю пример hapi-auth-cookie и хочу «показать» что-то на странице клиента, когда пользователь зарегистрирован. Он не может отправить мою переменную стороне клиента. то, что идентификатор сделалNodeJS - отправка переменной клиенту

сервер:

'use strict'; 
const Hapi = require('hapi'); 
const Vision = require('vision'); 
const Inert = require('inert'); 
const Path = require('path') 
const internals = {}; 
let uuid = 1;  // Use seq instead of proper unique identifiers for demo only 
const rootHandler = function (request, reply) { 
    reply.view('index', { 
     title: 'examples/views/jade/index.js | Hapi ' + request.server.version, 
     message: 'Index - Hello World!' 
    }); 
}; 

     let my22 = true ; 
const users = { 
    geek: { 
     id: 'john', 
     password: 'password', 
     name: 'John Doe' 
    } 
}; 
const login = function (request, reply) { 
    if (request.auth.isAuthenticated) { 
     return my22 ; 
    reply.view('index'); 
    } 
    let message = ''; 
    let account = null; 
    if (request.method === 'post') { 
    if (!request.payload.username || !request.payload.password) { 
     message = 'Missing username or password'; 
    } 
    else { 
     account = users[request.payload.username]; 
     if (!account || account.password !== request.payload.password) { 
     message = 'Invalid username or password'; 
       return console.log('wrong pass'); 
     } 
    } 
    } 
    if (request.method === 'get' || message) { 
    return reply.view('login') 
    }; 
    const sid = String(++uuid); 
    request.server.app.cache.set(sid, { account: account }, 0, (err) => { 
    if (err) { 
     return reply(err); 
     } 
    request.cookieAuth.set({ sid: sid }); 
     return reply.redirect('/'); 
    }); 
}; 
const logout = function (request, reply) { 
    request.cookieAuth.clear(); 
    return reply.redirect('/login'); 
}; 
const server = new Hapi.Server(); 
server.connection({ port: 8000 }); 
server.register(require('../'), (err) => { 
    if (err) { 
     throw err; 
    } 
    server.register(require('vision'), (err) => { 
     if (err) { 
     console.log("Failed to load vision."); 
     } 
    }); 
    server.register(Inert,() => {}); 
    server.views({ 
     engines: { jade: require('jade') }, 
     path: __dirname + '/templates', 
     compileOptions: { 
      pretty: true 
    } 
    }); 
    const cache = server.cache({ segment: 'sessions', expiresIn: 3 * 24 * 60 * 60 * 1000 }); 
     server.app.cache = cache; 
     server.auth.strategy('session', 'cookie', false, { 
      password: 'password-should-be-32-characters', 
      cookie: 'sid-example', 
      redirectTo : '/login', 
      isSecure: false, 
      validateFunc: function (request, session, callback) { 
       cache.get(session.sid, (err, cached) => { 
        if (err) { 
         return callback(err, false); 
        } 
        if (!cached) { 
         return callback(null, false); 
        } 
         return callback(null, true, cached.account); 
       }); 
      } 
     }); 
    console.log(cache); 
    server.route(
     { method: 'GET', 
      path: '/', 
      config: { 
       handler: rootHandler 
      } 
     }); 
    server.route({ 
     method: ['GET', 'POST'], 
     path: '/login', 
     config:{ 
      handler: login, 
      //auth: { mode: 'try' }, 
      plugins: { 
       'hapi-auth-cookie': { redirectTo: false } 
      } 
     } 
    }); 
    server.route({ 
     method: 'GET', 
     path: '/logout', 
     config: { 
      handler: logout 
     } 
    }); 
    server.route({ 
     method: 'GET', 
     path: '/bower_components/{params*}', 
     handler: { 
      directory: { 
       path:'bower_components' 
      } 
     } 
    }); 
    server.route({ 
     method: 'GET', 
     path: '/public/{params*}', 
      handler: { 
       directory: { 
        path:'public' 
       } 
      } 
    }); 
    server.start((err) => { 
    if (err) { 
     throw err; 
     } 
    console.log('Server is listening at ' + server.info.uri); 
    }); 
}); 

(часть) клиента с нефритом:

body(ng-app='blogApp') 
    if my22 
    h3 hiiiiii 
    else 
    h4 2222222 

как вы думаете, что я должен делать?

ответ

1

Вы на самом деле говорите о серверной стороне шаблонов, а не о стороне клиента здесь.

Если вы хотите сделать значения доступными для шаблона нефрита, просто перейдите в литерал JavaScript как второй аргумент функции просмотра.

let my22 = true; 
reply.view('index', {my22 :my22}); 
+0

Так что в этом случае я должен отправить его вот так? reply.view ('index', {my22: true}); – Mojtaba

+0

Ну, если у вас есть переменная, объявленная и доступная в области видимости, вы можете делать то, что я сделал. Вы также можете делать то, что вы показываете {my22: true} –

+0

Если вы по объему означают «угловую $ область», я не добавлю свою новую строку, но она не работает. Возможно, из-за области, о которой вы упоминали. – Mojtaba