>> Tudo bem por isso estamos de volta, um par de metas para hoje,
vamos pegar onde paramos da última vez,
lembro que estávamos tornando esta sucessão
de aplicativos de servidor relacionado, super simples mas usando nó JS
e, em seguida, também, mais recentemente usando o toque Express como
e qual foi expressa a JS análogo no mundo do PHP.
Assim expressa é mais ... perto,
assim expressa é, essencialmente, o Quadro MBC que é bastante
popular no mundo js o nó,
Bookshelf que veremos hoje via Tim é um análogo
eloqüente do que é um ORM em um mapeador de relação de objeto
que realmente faz com que seja mais fácil para evitar código SQL de baixo nível
e, na verdade, expressam relações entre vários objetos.
Então, uma das mais legais coisas honestamente
sobre nó js é o quão facilmente se presta
para fazer aplicações em tempo real, coisas como servidores de bate-papo
ou servidores de mensagens, qualquer coisa que vocês agora usam
como o Google ... G-chat ou ponto de encontro Google
ou atualizações de status do Facebook ou até mesmo o Twitter, se você é
na sua página web tudo é uma espécie de tempo real
ou dá-lhe a ilusão de tempo real
e isso é realmente uma dor no o pescoço para ver com algo
como PHP e meu SQL direito o que propomos
na segunda-feira seriam os meios
por que você poderia implementar o ilusão de comportamento em tempo real
com um servidor de bate-papo em PHP, o que você tem que fazer?
Alice envia uma mensagem, bate entrar onde ela vai?
É.
>> [Seção inaudível]
>> Numa base de dados e, em seguida, o que é que o browser do Bob tem
que fazer para realmente ver o que Alice disse, certo?
>> [Seção inaudível]
>> Mantenha a checagem da base de dados, bem, então uma solicitação ajax tem
para disparar a cada segundo, a cada poucos segundos ou falamos brevemente
mas não olhou para um exemplo de algo chamado longo da votação,
Alguém lembra de como
esse mecanismo em ... um nível elevado funciona?
>> [Seção inaudível]
>> Exatamente, sim para que um navegador ainda faz uma solicitação ajax
a um servidor, a um php foo dot mas foo dot php apenas parece
para pendurar, que essencialmente se senta em um loop while para o maior número
apenas 30 segundos e tipicamente apenas uma vez o arquivo php ponto foo
oh percebe que há uma nova linha
na base de dados faz ele realmente responder
com uma respondem http.
Então você acha que isso pode caso contrário o servidor pendurar
e faz até certo ponto
mas significa que há muito menos sobrecarga
porque você não precisa de um novo tcp conexão, uma nova conexão htp
solicitar efectivamente dados a partir do servidor.
Mas nó js vem com um muito biblioteca popular chamado soquete
dot io que você poderia nunca usei é construído em cima
de uma tecnologia chamada web soquete que está presente
nos navegadores mais modernos e o soquete io faz é permitir que você
para criar, essencialmente, uma conexão persistente
entre o navegador eo servidor isso é muito baixo overhead
para que você não necessariamente tem os mesmos problemas de escala
que você pode, se você estiver constantemente batendo o servidor
no mundo do PHP e meu SQL e semelhantes.
Mesmo para os navegadores mais antigos
que não suportam a tomada web esta tomada dot biblioteca io pode
voltar a cair flashes implementação de sockets
e tomadas é uma rede coisa de CS143 por exemplo.
Ou ele pode até cair para trás em longo próprio voto para que implementar
esse mesmo tipo de trabalho
em torno de realmente manter a ilusão de que a conexão.
Então o socket [inaudível] io e este está na forma
de uma biblioteca de java script, essencialmente, se você usá-lo
sob a forma de um nó js aplicativo que você não apenas instalar
lo como uma embalagem utilizando algo como NPM que usamos na segunda-feira
e ou você também incluir um tira tag em em seu arquivo html
que diz usar o biblioteca do lado do cliente.
Portanto, há duas metades para eo que fizemos aqui
na quarta versão de seqüência de segunda-feira
dos exemplos é a seguinte.
Portanto, esta estrutura de arquivos é reminiscência de um conjunto muito comum
para js expressas e felizmente é a maneira mais simples
que lervo [fonética] foi, lembre-se quando definir
se lervo você tem uma enorme desagradável despejo de um monte de arquivos,
diretórios de fornecedores, lib e muito peso pesado comparado com isto.
Agora na justiça temos despojado embora o material que é praticamente uma
distração, mas todo o material suculento é que realmente está
em módulos de nós.
Só para lhe dar um gosto, se olharmos
em módulos de nós há dois módulos ou bibliotecas
que eu tenha baixado, este seria o equivalente
do diretório de fornecedor, um é chamado expressa o que é
como larevel mas no nó
e tomada io o que eu acabei de mencionar.
Portanto, estas existem para que possamos faça o seguinte se eu abrir
se vamos dizer html índice ponto, Vamos primeiro olhar para o html,
isso vai compor este corpo, o meu super,
servidor de chat super simples.
Portanto, não há, aparentemente, um ul com uma idéia original de mensagens
e é aí que li uma de cada vez,
todas as mensagens instantâneas são vai aparecer entre Alice
e Bob e, em seguida, há uma forma simples, com um campo de texto
e um botão de envio pelo que Alice
ou Bob pode realmente mensagem outro.
Assim, o efeito líquido se Eu executar este aplicativo
fazendo nó aplicativo espaço dot js, se eu puxar para cima um par
das janelas do navegador é que Alice pode estar à direita,
Bob pode estar no esquerda e apenas
para ficar claro que não há mágica aqui eu tenho uma janela
em incógnito por isso não há partilha de cookies ou qualquer coisa
assim, estes são dois usuários distintos.
Eu deveria ser capaz de ter Alice dizer Olá Bob, clique em enviar
e agora você vê à esquerda que a mensagem de Alice foi enviado
e quase que instantaneamente à direita.
Sem votação aparentemente envolvidos, Bob recebeu a mesma mensagem.
Agora Bob diz dizer hey Alice você vê o efeito oposto.
Então, o que realmente está acontecendo, como quantidade de código que precisamos para escrever
para implementar este um servidor de chat
que agora você pode extrapolar mentalmente que todos
nesta sala se esta não estavam na minha [inaudível]
mas em foo dot com todos nós poderíamos começar a conversar instantaneamente
uns com os outros.
Então o que está envolvido e antes que eu limpar esta tela é este
é apenas o socket io ser um pouco barulhento, é só impressão
informações de depuração para a tela,
não há realmente nada mais acontecendo lá.
Então deixe-me abrir app js ponto, de modo como antes temos algumas coisas
no topo do ficheiro.
Um grupo de requisitos, assim que estes são como bibliotecas
ou aguçar pistas ou exigir onces qualquer que seja o modelo que você mentais
quer ter e apenas para recapitular FS é usado
para que tipo de funcionalidade?
Assim sistema arquivos para leitura de arquivos potencialmente e coisas assim
e eu uso isso em um colocar como você vai ver,
expresso, claro, é esta quadro que estamos usando,
ele não é estritamente necessário que pudemos
como na segunda-feira totalmente criar nosso próprio servidor http do zero
fazendo criar servidor e todos desse tipo de código de antes
mas como veremos isso faz as coisas um pouco mais fácil
porque tudo o que tenho a fazer é na linha 3 aqui instanciar
e expressar objeto, eu vou chamar ela aplicativo, arbitrariamente,
Eu vou em seguida, dizer o aplicativo escutar arbitrariamente porta 1337,
que poderia ser 80 por convenção
E então, finalmente eu tenho um novo linha hoje que está dizendo
de exigir a tomada biblioteca io e depois
por esta abordagem de cadeia faria este operador ponto Eu sou apenas
chamando uma lição ouvir isso essencialmente dizendo a tomada
biblioteca io também ouvir esse mesmo servidor
ou web conexões de soquete.
Então agora o que, por isso, o que é esta fazendo, estas quatro linhas
de código aqui que deveria olhar que lembra larevel,
O que isso representa?
>> [Seção inaudível]
>> Este é um ... rota, apenas uma rota para que em app js ponto,
aka js ponto do servidor, dependendo sobre o que as pessoas querem chamá-lo
em seus próprios aplicativos você tem uma convenção
de fazer a definição de suas rotas,
aplicativo get ponto significa sempre você recebe uma solicitação get ir
para para, literalmente, cortar vá em frente e chamar essa função anônima
ea função anônima em Neste caso, toma por exigência
ou solicitação e uma resposta, potencialmente algumas outras coisas
mas minimamente estes dois.
O pedido dá-lhe acesso a coisas como parâmetros http
e cabeçalhos e outros coisas suculentas
e, em seguida, a resposta é o mecanismo
pelo qual você pode responder ao utilizador.
Então, isso é super simples, mesmo embora não vimos muito o
mesmo código última vez, eu sou utilizando os módulos do sistema de arquivos,
criar método de fluxo de leitura que essencialmente faz isso,
criar um fluxo de leitura que significa essencialmente começar chupando
os bytes do índice dot html da forma mais eficiente possível
sem necessariamente esperar até o seu ler o arquivo inteiro
e como você faz isso tubo-los literalmente
no sentido barra vertical se você está confortável
com a linha de comando do Linux,
inseri-lo em resposta de objeto.
Assim, havia dois exemplos relacionadas aos fluxos na segunda-feira,
nós só olhou para um, mas você é bem-vindo a olhar para trás
no fluxo oe fluxo 1.
Fluxo 1 ... 0 fez algo semelhante a este,
fluxo 1 fez algo quase exatamente como este,
esta é apenas uma mancha um forro de dizer espécie
de sorver algo aqui e, em seguida, começar a enviá-lo aqui
ao mesmo tempo, sem fazendo uma massa de acordo
e, em seguida, um direito enorme,
esta abordagem é geralmente mais eficiente.
Então, esse é o tipo de coisas velhas mesmo que fosse novo na segunda-feira,
isso é tudo o que é preciso para implementar um servidor de chat
js com nós e mais especificamente soquete dot io.
Assim como este trabalho, deixe-me mover-se um pouco,
io assim é apenas uma variável que se refere
para o módulo nós exigido anteriormente,
Tomada ponto é apenas um propriedade dentro dele
que me dá tomada funcionalidade relacionada
em é um método comum de que relaciona-se com o conceito geral?
Um evento assim por diante aka ouvir algumas bibliotecas Significa apenas
ao ouvir este evento que é chamado de conexão
e agora você sabe que isso só a partir de olhando para a documentação,
quem escreveu a biblioteca definido um evento chamado
conexão que faz o que sua pensaria
quando Alice ou Bob conecta.
Vá em frente e chamar isso de função anônima take passagem
em um argumento que o cliente que é aparentemente algum tipo
do objeto que representa Ligação de Alice
ou conexão de Bob ou Charlie ou qualquer outra pessoa
e agora vamos fazer o seguinte.
Nós dizemos ao cliente após ele ou ela está ligada
ouvir especificamente
para uma mensagem que é completamente arbitrariamente chamado mensagem
cliente cólon.
Isso é algo que Tim e Eu vim com, poderia ser foo
ou bar, é apenas alguns string única que precisávamos
para decidir sobre como os desenvolvedores.
Sempre que Alice ou Bob ouve
que o evento deste anônimo função deve ser chamada
e os dados, o conteúdo de Alice
ou mensagem de Bob deve ser passou para esse manipulador de eventos
e agora o que deve o cliente fizer assim você pode tipo
de ler este bastante intuitiva o cliente deve transmitir,
também conhecido como emitem um mensagem chamada servidor método
significando assim esta mensagem é proveniente do servidor não
a partir do navegador eo que que essa mensagem seja,
é, aparentemente, a carga de o que veio a partir dos clientes
e nós apenas estamos indo para arbitrariamente chamar mensagem.
Então, um monte de presente é arbitrária
através de nomeação razoável convenções, Tim e eu vim
com, principalmente Tim e então nós simplesmente estão a criar, finalmente, um
servidor que faz o bate-papo, quando Alice envia uma mensagem
e sucessos entrar o evento aparentemente é demitido,
Apenas para recapitular.
Alice digita uma mensagem, hits entrar, cliente de mensagem é disparada,
este código ouve isso e agora o servidor transmite o que,
qual é o resultado final isso realmente?
Alice envia a mensagem agora o servidor retransmite
efetivamente para todos, exceto para Alice, por que todos, exceto
para Alice se você só olhar
no cliente documentação dot dot transmissão admitir,
literalmente faz isso, transmite a mensagem
para todos, exceto o cliente que lhe enviou
que a mensagem mais recente.
Então é por isso que você só vê-lo uma vez em cada lado,
você não vê Alice e Bob recebendo mensagem de Alice.
Então é isso, este é um agente de retransmissão
se você é tendo apenas em mensagens
e retransmitindo-os para fora
e é notavelmente escalável Quero dizer, mesmo
com um super simples servidor e algumas linhas
de código que você poderia certamente lidar com centenas, senão milhares
de mensagens simples simultâneos indo e voltando como esta
e apenas imaginar a complexidade agora de fazer isso em PHD
ou Larevel ou meu SQL e a quantidade de código que você teria
para escrever, a fim de realmente conseguir isso.
Agora na justiça esta não está certo persistente
se o servidor vai para baixo perdemos toda a história
por isso não é um bom tradução perfeita, mas é
que para a frente.
Vamos olhar para o script Java código que pulado antes,
este é Alice e Cliente de Bob,
a página da web que eles estão usando agora vamos dar uma olhada aqui por um momento.
Há um pouco mais de código
mas é praticamente só jQuery aqui tão aviso
que na página web que eu puxei
até um momento atrás, incluir a biblioteca jQuery,
a tomada io biblioteca e como Um aviso de lado a diferença
aqui, slash slash em o início de um caminho
como isso significa o que exatamente,
onde está o jQuery dot js sobre o servidor?
É.
>> [Seção inaudível]
>> É na internet sim código literalmente chamado ponto jQuery
dot com então por que cortar, cortar, por que não apenas uma barra,
onde está o http ou o cólon, o que isso significa, em geral,
se você cortar a barra o início da url?
É realmente útil.
Ok, então o que é, obviamente, http faltando agora se motivo
por isso logicamente, Normalmente você não precisa
para citar nomes de servidores direita
como se só usar barra jQuery ponto js que é assumido
pelo navegador?
Que o arquivo está no mesmo servidor para continuar esse tipo
da lógica, se você não contar que o que o que é o protocolo
navegador assumir, mesmo protocolo de modo Se você já visitou sites
que dar-lhe um erro, juntamente as linhas de conteúdo inseguro
desta página é porque alguém tem codificado um http
barra cólon URL barra para uma imagem ou um arquivo de script Java
ou arquivo CSS, algo assim no código fonte da página
mas a própria página na URL navegadores é http s.
Portanto, este é apenas o maneira pouco de fantasia
de dizer que eu não sei qual é o protocolo
que esses usuários finais vai usar
mas apenas se certificar de que jogos para que cromo
e outros navegadores Não grite com o usuário.
O único problema de ser o pessoas jQuery era melhor definir
https em seus servidores.
Então, eles são, na verdade listagem no 443.
Tudo bem, entretanto, este um aqui presente é uma espécie
de barra enganador Tomada io sugere
que há um diretório chamado io tomada de pontos no meu servidor
mas não há se picar
ao redor, há o diretório do módulo nó
mas não há nada pública sobre o assunto,
quando configurado io soquete para escutar as mesmas portas,
1337, essencialmente, que biblioteca que outra pessoa escreveu é ir
a espécie de inserir algum código em ambiente de JS nó
e apenas ouvir para este caminho.
Essa biblioteca tem apenas configurou uma rota para este,
não é um diretório real.
Seria numa localização padrão.
Ok, então agora o interessante parte,
por isso, quando o documento é preparado como indicado
por este jQuery construir, primeiro eu vou seguir em frente
e se conectar a um soquete,
que tomada apenas por mantê-lo ... simples eu vou ligar
para cortar, isso é onde o usuário está,
Eu mantive o exemplo simples nós apenas estamos indo para se conectar
para o mesmo URL exato em que o usuário visitou então eu vou
fazer o seguinte, eu vou dizer o navegador da Alice ou Bob
para ouvir o a mensagem do servidor.
Novamente, isto poderia ter sido foo
ou barrar qualquer momento que você ouvir uma mensagem
do que de dados chamada de servidor e depois fazer esse código jQuery
que eu estou supondo que a maioria se nem todo mundo é familiar
com estes dias, mas essencialmente um alfinete para lista de itens
a UL existente que foi chamado de mensagens
que diz literalmente qualquer que seja a carga é
da mensagem de bate-papo seguido de um hífen, seguido por receber,
seguido de um espaço e, em seguida, um tempo de atualização e é por isso
ser claro se voltarmos
para isso, você obter estas adicional balas de novo e de novo
e novamente com tempos de data.
Entretanto, se olharmos aqui só temos
para lidar com o envio do formulário de modo que era o receptor
de uma mensagem instantânea, é aqui o envio e esta é uma espécie
de relação com js nó, ouça para as formas de apresentação de evento.
Quando isso acontece prevenir padrão, isto significa apenas não submetê-lo
para o servidor na habitual forma, recarregar a página inteira,
nós queremos fazer tudo isso via ajax.
Aqui está apenas alguns códigos jQuery
para começar realmente a entrada cujo tipo é a mensagem,
cujo nome está mensagem vá em frente
e se o seu valor então vá em frente
e se você realmente tem um mensagem, se Alice e Bob
ou Bob, na verdade, alguns tipos nenhum número de teclas digitadas 0 emitem
no soquete uma mensagem chamada cliente de mensagem com a carga útil
e, em seguida, aqui é o que o torna verde em oposição
para vermelho, nós simplesmente saída lado aparelho [inaudível].
Então é isso, mas todos Esta é apenas a configurar,
o material real novo eu faria argumentar é apenas estes três
ou cinco linhas de código aqui e esse tipo de dicas para o poder
js de nó e com ele esta biblioteca particular.
Então, vamos dar uma rápida olhar ponto expressas js,
então o que eu vou tentar fazer o casal remanescente
de minutos aqui é criar um poucos idéia, algumas técnicas
que, então, tomar um casal hora break, Tim vai criar
e depois vamos mergulhar no mais profundo
de uma forma mais interessante expressar aplicação e também
a estante, a biblioteca a Tim realmente escreveu
para a comunidade open source
que nos dá luz eloqüente funcionalidade com o meu SQL
e as transações e outros tais características e ele também vai mergulhar
em um pouco mais para o própria linguagem Java script,
como seu objeto ou não-classe modelo funciona se não sabe
como um modelo de protótipo, um pouco mais de que para vir.
Então, vamos dar uma olhada em dois últimos aplicações aqui, servidor de cinco
e um servidor 6, que são todos espécie de similar em espírito,
estes não são servidores de bate-papo mas eles usam expresso.
Então, vamos dar uma olhada o que isso realmente acontecer,
Eu estou indo para ir em frente e aberto ... Eu estou indo para executar este aplicativo
com js app nó, eu vou voltar para o meu navegador e recarregue
e isto é aparentemente todo esse servidor está fazendo,
é um servidor super simples que é, aparentemente, uma pesquisa
motor, então se eu digitar foo e apresentar, nenhum resultado de pesquisa
para foo, eu não dar a volta a implementar o sofisticado
back-end, tudo o que está acontecendo
fazer é eco não importa o que você digita nenhum resultado para foo,
nenhum resultado para bar então como é que vamos fazer isso
porque há um peças casal, um,
há claramente alguns inputs sendo fornecidos
para o servidor não Larevel , claro, mas js nó agora
por isso precisamos de alguma forma chegar a esse parâmetro Q,
estamos fazendo claramente algum tipo de vista aqui,
estamos tornando uma visão tão talvez haja uma oportunidade
para modelos ou variável interprelation [fonética]
então vamos dar uma olhada no seguinte.
Em js app para este particular servidor isso é tudo o que temos.
Uma exigimos expressar em si, o módulo dois caminho
que só faz alguma coisas úteis
como se juntar cordas juntos e assim por diante, para mim,
Eu escutar na porta 1337 e agora isso é novo para que ele se transforma
que expressa como Larevel suporta diferentes plug-ins
e tecnologias e outras coisas e uma
das tecnologias que lhe pode conectar um mecanismo de exibição
que significa apenas que templating motor que você quer usar,
Larevel teve seu próprio coisa, mas você pode ligar
em coisas diferentes, diferentes enquadramentos pêssego P tem
diferentes formas de modelagem, ejs é apenas um comum
e um mecanismo muito simples que só lhe permite fazer coisas
como as chaves que você teve na sintaxe Larevels
para substituição de variáveis,
é um pouco diferente sintaticamente é tudo.
Então agora não há essa coisa chamada middleware, de modo que você vai ver
em seu próprio equipes nó do projeto um middleware é apenas uma espécie de código
ou bibliotecas que injetam
na resposta [inaudível] ciclo de vida de uma aplicação,
por outras palavras, estes dois linhas estão dizendo expressa
para fazer algum trabalho extra entre no momento em que recebe um pedido
e entre o tempo que envia esse pedido para o seu próprio percurso,
seu código que você escreveu.
Assim, em particular, esta linha aqui usar ponto expressa estática e todos
dessa complexidade esta apenas significa que se você ver um pedido
que vem em um arquivo estático como jif foo foo ponto ou ponto css
ou foo ponto não js assim um rota gerada dinamicamente,
vá em frente e assumir que vive no subdiretório público,
isso é tudo o que está fazendo.
Ele é uma espécie de mapeamento em Larevel, tudo para o seu web
ou seu diretório público em vez de Larevel.
A próxima linha é apenas dizendo que eu quero usar rotas,
Eu quero usar coisas como aplicativo dot obter
que vimos há pouco e vamos ver em apenas um segundo momento.
Dot Então aplicativo obter meios ouvir para esta rota,
cortar quando você conseguir chamar este função anônima que leva
em um pedido e um resposta e agora só
como Larevel você tem uma maneira de prestação de um modelo,
resposta dot render, citar índice fecha aspas,
tornar uma modelo chamado índice,
é isso então vamos suspender essa passe por apenas um olhar momento
o conteúdo de o diretório visualizações
e perceber isso também é super simples, por agora,
há índice ejs dot e pesquisar ejs ponto,
Eu, obviamente, querem que o primeiro
porque isso é o que eu acabei de cansado de prestar e vamos ver
no índice de visualizações ejs dot mais na verdade inteiramente html
no momento, não há na verdade, não de templates acontecendo.
Então, eu tecnicamente não precisa mesmo de chamá-lo de ejs,
Eu não preciso que a funcionalidade mas eu mantive-o uniforme,
então é isso, é isso que me dá essa forma super simples.
Então só há uma outra rota, se olharmos para baixo aqui que eu disse
que é isso que lida obter barra de busca para o tipo real
do Google como manipulador para o formulário de apresentação, quando você chegar
esse caminho chamar este função anônima
e tornar o modelo chamado de busca
e o que é o segundo argumento presumivelmente dizer.
Parece um objeto json de tipos ou objeto Java Script.
Qual é o papel do que segundo argumento presumivelmente?
>> [Seção inaudível]
>> A consulta real que o usuário digitou aparentemente vive
na solicitação de consulta de pontos, consulta referindo-se a tudo
após o ponto de interrogação ponto q, que é o nome arbitrário
que eu dei-lhe apenas como Google
e, entretanto, q cólon é apenas dizendo passar para o modelo,
ejs busca do ponto, um chave de q e um valor
de tudo q do real valor foi.
Assim que deixa apenas um arquivo de interesse para pontos de vista,
ejs busca de pontos que guardei esta super simples também,
É na maior parte apenas html exceto para uma linha um pouco notável
que é esta sintaxe aqui que se parece com um monte
de modelagem diferente motores isto significa apenas plugue
no valor de q e torná-lo em negrito.
Então não há nenhuma pesquisa real funcionalidade, mas ele faz tipo
de sugerir como se fosse estruturar um esqueleto
de uma aplicação como essa.
Enquanto isso ... na verdade eu pode mostrar uma outra coisa,
perceber que eu tenho alguma html aqui para css
e arquivos de script de Java, não há nada nesses arquivos
no momento, mas perceber que existe um diretório público
como eu disse anteriormente para arquivos estáticos por isso, se eu for
lá há meu diretório css,
se eu ir lá lá está estilos dot css
e não há nenhum conteúdo lá
mas é como se fosse têm arquivos acessíveis públicos.
Tudo bem, vamos dar uma olhada em uma outra variante aqui
e, em seguida, vamos introduzir uma idéia e pausa.
Portanto, este é o último servidor 6, de modo este é quase idêntica excepto
para as duas linhas de fundo que se parecem com isso.
Então, na verdade, há uma terceira linha que é diferente
mas eu escondi ... então deixem-me para trás -se um pouco para que alguém quer
propor o que está acontecendo aqui em termos leigos
ou termos técnicos O que há de diferente sobre esta versão
no que diz respeito aos linhas no topo nós.
Que tenho eu presumivelmente feito aqui e por quê?
Sim, Sharon.
>> [Seção inaudível]
>> Sim, parece que eu tenho índice e pesquisa moveu
de modo separado direta ou algo assim, Eu consignado los
e é por isso que muito parecido em Larevel você poderia colocar tudo
da sua lógica controlador dentro de rotas ponto php
com funções anônimas novo e de novo e de novo
mas esse arquivo, é claro pode ficar muito grande
assim em rotas ponto PHP O que mais
de que vocês têm feito se você tiver especificado o nome
de uma classe de controlador ou o mesmo nome de um método
que deve ter chamado
assim a mesma idéia aqui mesmo embora a sintaxe seja um pouco
diferente assim aqui aviso
que eu tenho aparentemente implementado meus próprios js nó
módulo e um módulo é apenas uma Arquivo de script Java que adere
para essencialmente uma convenção que vamos ver em apenas um momento.
Assim, assumir que todo o meu funcionalidade para o índice
e para a pesquisa têm, aparentemente, foi colocado neste diretório
e agora eu estou chamando que toda módulo ou pacote ou biblioteca,
o que quiser para pensar nisso como,
como rotas de uma variável chamado rotas.
Então, aparentemente, lá em rotas índice de pontos é um método chamado
índice e, aparentemente, não há outro método chamado de busca
neste módulos rotas ou biblioteca
e eu estou apenas encaminhá-lo apenas para que eu não colocar tudo
do meu código anônimo dentro do meu arquivo do aplicativo.
Então, vamos entrar em vias de aviso há apenas índice js dot
e se eu olhar aqui é a convenção que eu quis dizer anteriormente
então isso é muito arbitrário mas é a convenção nó.
Toda vez que você implementar sua própria biblioteca js nó,
aka módulo que você pode essencialmente escrever qualquer código de script Java você
quer neste arquivo, ele será ser areia muito limpa em caixa
de modo que todas as variáveis ​​você optar por não irá colidir
com a biblioteca de qualquer outra pessoa, variáveis ​​ou métodos ou nada
assim, mas nada que você deseja expor
para o mundo exterior um ala método público em Java script
ou php ou outras linguagens você tem que chape dentro
de um objecto global que o autor de nó chamado exportações.
Então, fazendo as exportações dot índice que estou expondo a usuários
deste módulo um método chamado índice que mapeia para esta função
por isso é anônimo na do lado direito
mas eu estou efetivamente dando-lhe um nome no lado esquerdo
e exportá-lo para o mundo
de modo que você pode chamar índice ponto ou busca de pontos.
Então, para ser claro, se eu também tinha algo como função foo
aqui que fez algo
que a função seria ser absolutamente operacional,
que poderia ser chamado este arquivo, mas ninguém
no mundo exterior frio nunca chamar foo
porque não foi exportado por meio desta notação de ponto.
Então, isso é tudo o que está acontecendo,
tudo está bem nomear espaçados para você.
Assim, o resultado final que se eu fizer nó do aplicativo e recarregue a página é
que se eu agora pesquisar
para a barra ... funcionalmente esses aplicativos são os mesmos
mas é apenas uma espécie de passo em direção a uma implementação mais limpa,
certamente, quando você começar a escrevendo mais e mais código
e isso é tudo o que são.
Obviamente não é particularmente sofisticados ou complexos
mas, essencialmente, um ponto de partida
para o que será o seu primeiro aplicativo js nó.
O que nós vamos fazer provavelmente mais tarde esta semana ou no fim de semana
como você está terminando no aplicações php vamos seguir
com uma bem simples aplicação para a equipe de mergulho
em similares em espírito à o exercício de aquecimento para php
, que com base na levantamento semestre mid,
gente achava útil passando pelo exercício
de fazer algo bastante simples
mas bastante guiada antes de realmente enfrentar algo mais
em seu próprio país por isso vamos acompanhar com que
e será essencialmente devido a uma semana e meia
a partir de agora se sobrepõem ligeiramente com php deliberadamente.
Todas as perguntas, em seguida, em expressar, em io de soquete
ou confusão restante de segunda-feira, talvez.
Tudo bem por isso espero que um dos o take-a-maneiras, até agora, é
que há para alguns destes coisas, certamente, muito menos
sobrecarga do que você pode têm sido utilizados para.
Então, deixe-me apresentar uma última ideia,
de modo muito comum paradigma de programação
em Java script que é realmente presente em jQuery
nas versões recentes assim pode ter realmente visto esta técnica
antes, mas é também bastante comum no mundo js o nó,
é comum em Tim biblioteca Bookshelf próprio
então vamos rever isso em um exemplo mais concreto
num momento em que é uma solução para um código como este,
este é representativo do código vimos na segunda-feira, assim que ler o arquivo
, neste contexto, não é uma verdadeira método é semelhante em espírito
para fs dot arquivo ler, mas assumir que este é apenas alguns feitos
se método que faz algo muito semelhante.
Então, nós funcionamos em alguns questões na segunda-feira, em geral,
então o que é mais ou menos ... por que é este um terreno escorregadio,
esta chamada de volta paradigma de programação Java script
e por chamar de volta paradigma Eu só quero dizer esta técnica
onde você não voltar valores imediatamente
porque isso poderia bloquear o servidor
de fazer outra coisa que é útil, em vez chamar de volta
como as campainhas de agitação Shack quando estiver pronto
para passar de volta uma resposta como um argumento.
Este é um terreno escorregadio
onde se muito rapidamente torna-se irritante por quê?
É.
>> [Seção inaudível]
>> Sim, minimamente, torna-se espécie de direito ilegível
se você tem todos esses chamada costas e se você está aderindo
ao bom estilo está ficando muito maciçamente recuado
ao longo do tempo e caso eu apontar isso exemplo, se você espécie de roçar
por isso é simplesmente para abrir um arquivo json e imprimi-lo,
como é isso e ainda assim tem cerca de 8 ou 10 linhas aqui
que já são uma espécie de nastily recuado,
temos try catch que é
se você não estiver familiarizado é uma técnica de tratamento de erros
que lhe permite tentar algo
e, se falhar, em seguida, você pegá-lo esperançosamente
sem todo o seu programa terminando, mas não há
tanta complexidade como você tipo de ter que pensar nisso
e Deus nos livre de fazer um par de outro método assíncrono chama,
a coisa já está vai ser aqui,
você pode pensar que isso é uma espécie de uma estética bobagem, mas esta
porque a chamada de volta paradigma é tão comum, pelo menos
em código nativo deste nó muito rapidamente se tornar entediante,
difícil de debug, o recuo começa a ter importância para que você pode classificar
de coisas de perseguição para baixo, é não apenas uma maneira muito feliz
de programação.
Então, o que as pessoas têm feito
em vários nó de contexto entre eles é tentar simplificar isso,
OS para promessas da instância é uma outra maneira de pensar
sobre como escrever código assíncrono algo que se torna visualmente
como a versão 1 em Nesta versão 2.
Eu afirmo e esta é novamente apenas uma espécie de misto
entre o código real e pseudo de código, isto é representativo
de como você se re-implementar exatamente a mesma coisa,
abrir um arquivo json, analisá-lo e imprimi-lo
usando algo chamado promessas
eo detalhe chave sintática é
que há um encadeamento acontecendo aqui.
Note-se que o único ponto e vírgula
no todo ... na verdade bem vamos ... Eu não quero enganar.
Isto não é estritamente necessário mas vamos ser consistente,
notar que o ponto e vírgula que se refere à abertura
desta declaração inteiro é todo o caminho até aqui.
Então, enquanto eu tiver formatado este tipo de olhar ...
como três afirmações, três declarações que você pode ver
em Java ou outras linguagens que têm try e catch
e tratamento de exceção de modo mais geral.
Observe que eu só cadeia o valor de retorno de cada
destes métodos em conjunto.
Então, o que está acontecendo, ler o arquivo se este é um método que existe,
aparentemente tenta para ler o arquivo,
dot então sim, então é muito nome comum dado no mundo
de promessas para o método que deve ser executado
se a coisa anterior conseguiu.
Então, é mais ou menos como o sucesso manipulador, a análise ponto por isso, então json,
bem parse json dot é apenas um método
na biblioteca json mundial e, aparentemente, adere
no presente caso, o modelo de promessa
por isso dizemos que podemos apenas supor que esse cara chamada
e se ele for bem-sucedido, em seguida, chamar esse cara e, em seguida,
se isso é realmente executado simplesmente consolar o registo de dados
em questão.
Então, onde está o erro manuseio, repare que eu tenho a sorte
de muito cegamente pisou fora desta borda
e apenas chamou este método e, em seguida, este método
sem verificação para os problemas.
Bem onde estão aqueles problema presumivelmente tratadas ... nestes
declarações de cache de modo diferente bibliotecas usar diferentes
convenções, mas em Neste caso, então, é espécie
do manipulador de sucesso, cache é uma espécie de manipulador de erro
e porque não quebrei essa cadeia que acabamos de continuar usando
a notação de ponto de ligação em conjunto a invocação do método originais
de arquivo de leitura ea função invocação erros de ordenação
da bolha seu caminho através da cadeia
até que eles estão realmente tratado que é a maneira mais limpa do que tentar
de lidar com ele todos os passo maldita do caminho
de modo que o seu código muito torna-se rapidamente dados irreais.
Neste caso estamos alegando que tentamos
para travar o que é chamado um erro de sintaxe é essencialmente um
subclasse de uma forma mais genérica erro e se isso acontecer reivindicação
que é JSON inválido de outra forma se é um erro mais genérico
que não esperávamos apenas mais geralmente dizem não pode
ler o arquivo.
Agora, esta é apenas significou para ser o código representativo
mas se você já programou em script de matéria-Java ou em Java
ou outras linguagens é código de procedimento, essencialmente,
esta é uma forma mais tradicional tente instrução catch
e essa é a estética e a funcionalidade que promete
ou a tentar dar-lhe através do qual você pode pensar nisso
como apenas escrever tentativa e, em seguida, pegar e depois pegar não ter
preocupar-se em todos os único ponto possível
onde um erro pode lidar com ... acontecer,
você pode lidar com tudo isso no acabar como necessário de um pequeno bloco
de código, e você pode até mesmo distinguir entre os erros
como você pode neste caso aqui.
Assim, a nomenclatura que você vai ver na literatura talvez
como Tim apresenta algumas deste material também é
que o ideal seria que você quer promete resolver
e resolver um meio promessa que finalmente voltar por assim dizer
mas não de uma forma tradicional de valor, de modo que seja bem-sucedido
para falhar essencialmente.
Tudo bem quaisquer perguntas, então, não é pra ser suficiente
para a exposição às promessas mas apenas um modelo mental
para o código vai começar a ver.