Después de instalar el nodo (descargar), cree un directorio en su máquina e inicie su primera aplicación.
$ Mkdir Hello-World
En este directorio, definirá el "paquete" de la aplicación, que no es diferente de ningún otro paquete de nodo. El archivo JSON en el directorio de archivos define claramente una dependencia. Puede usar el comando NPM para obtener la última versión de Express, que le gusta hacer, en lugar de instalar una versión que no sea "3.x" para evitar sorpresas desconocidas.
{"Nombre": "Hello-World", "Descripción": "Hello World Test App", "Versión": "0.0.1", "Privado": True, "Dependencias": {"Express": "3.x"}}Ahora tienes un paquete. En este directorio, puede usar NPM (1) para instalar esta dependencia, en este caso solo necesita ingresar:
Instalación de $ npm
Una vez que se termine NPM, tendrá un Express 3.x en el que depende en el directorio /node_modules. Puede verificar esto con NPM LS, al igual que el árbol expreso y sus propias dependencias que se muestran en el siguiente fragmento de código.
$ npm [email protected] /private /tmp└─┬ [email protected] ├── [email protected] ├─┬ [email protected] │ ├─ 25 [email protected] │ ├─ 25.0.4 │ ├ ├ ├. └── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├iqute [email protected] └── [email protected]
¡Ahora cree la aplicación en sí! Cree un archivo llamado App.js o Server.js, sin importar cuál le guste, introduzca express y luego use express () para crear una nueva aplicación:
var express = require ('express'); var app = express ();Las nuevas instancias de aplicación pueden comenzar a definir rutas a través de App.verb (), en cuyo caso, responder a la solicitud "Get/" a través de la cadena "Hello World". REQ y RES son exactamente los mismos objetos de nodo que se le proporcionan, por lo que puede llamar a Res.Pipe (), Req.on ('Datos', devolución de llamada) y otras cosas que haría que no tienen nada que ver con Express.
Express mejora estos objetos para proporcionarle interfaces de nivel superior como res.send (), además de agregarle longitud de contenido:
app.get ('/hello.txt', function (req, res) {res.send ('Hello World');});Ahora llame al método App.Listen () para que la conexión se vincule y escuche, aceptando los mismos parámetros que el neto del nodo.Server #Listen ()::
var server = app.listen (3000, function () {console.log ('escuchar en puerto %d', server.address (). Port);});Use Express (1) para generar la aplicación
El equipo Express mantiene un conveniente generador de proyectos llamado Express-Generator (1). Si instala Express-Generator globalmente con NPM, puede acceder a él desde cualquier lugar de su computadora:
$ npm instalación -g expreso -generador
Esta herramienta proporciona una manera fácil de obtener un marco de aplicación, pero con un alcance limitado, por ejemplo, admite solo unos pocos motores de plantilla, y Express en realidad admite la construcción de cualquier plantilla de marco de sitio web para Node. Puedes verlo a través de la ayuda:
Uso: Express [Opciones] Opciones: -h, -Información de uso de salida de la salida -help -V, -Sutenuez de la versión El número de versión -e, --Ejs Agregar soporte de motor EJS (predeterminado a Jade) -h, - -Hogan add Hogan.js Motor Support -C, -CSS Agregar soporte de stylesheet (menos de Stylus | STYLUS) (predeterminados)
Si desea generar una aplicación que sea compatible en cualquier caso, simplemente necesita ejecutar ::
$ express - -css stylus myAppCreate: myAppCreate: myapp/paquete.jsoncreate: myapp/app.jscreate: myapp/publicCreate: myapp/public/javascriptscreate: myapp/public/imageCreate: myapp/public/stylesheetscreate: myapp/public/stylesheets/style/style. myApp/rutas/index.jscreate: myapp/vistas/index.jadeCreate: myapp/views/layout.jadeInstall Dependencias: $ cd myapp && npm installrun la aplicación: $ debug = myapp node app
Como cualquier otra aplicación de nodo, debe instalar las siguientes dependencias:
Entonces comencemos.
Inicio de $ npm
Esto es todo lo que necesita para obtener una aplicación simple en funcionamiento. Recuerde, Express no está vinculado a ninguna estructura de directorio específica, estos son solo una guía para usted. La selección de la estructura de la aplicación se puede ver en el repositorio de GitHub.
Manejo de errores
El manejo de errores de las definiciones de middleware son como el middleware ordinario, pero se deben definir 4 parámetros, que es la firma de función (err, req, res, siguiente):
app.use (function (err, req, res, next) {console.error (err.stack); res.send (500, 'algo roto!');});Aunque el manejo de errores forzados en el middleware generalmente no se define al final, después de otro App.use (), su llamada se ve así:
var BodyParser = require ('Body-Parser'); var MethodOverride = require ('Method-Override'); App.use (BodyParser ()); App.use (MethodOverRide ()); App.use (App.router); App.use (Function (Err, Req, Res, Next) {// Logic});La respuesta en estos middleware es completamente arbitraria. Es posible que desee responder a una página de error HTML, un mensaje simple, una cadena JSON o cualquier otra respuesta que desee.
Para construir un marco organizado y de nivel superior, puede definir varios de estos errores que manejan el middleware, al igual que definiría el middleware normal. Por ejemplo, suponga que desea definir un controlador de errores para una solicitud XHR, además de esto, lo que podría hacer es lo siguiente:
var BodyParser = require ('Body-Parser'); var MethodOverride = require ('Method-Override'); App.use (BodyParser ()); App.use (MethodOverRide ()); App.use (App.router); App.use (LogErrors); App.use (ClientErrorHandler); App.use (ErrorHandler);En LogerRors más generales, puede escribir solicitudes y mensajes de error a STDERR, Loggly o Servicios similares:
función logerrors (err, req, res, next) {console.error (err.stack); Siguiente (err);}La definición de ClientErrorHandler se muestra a continuación, tenga en cuenta que este error se pasará explícitamente al siguiente.
function ClientErrorHandler (err, req, res, next) {if (req.xhr) {res.send (500, {error: 'algo explotó!'}); } else {next (err); }}La siguiente implementación de ErrorHandler "general" se puede definir como:
Función ErrorHandler (err, req, res, next) {res.status (500); res.render ('error', {error: err});}Contado de usuarios en línea
Esta sección explica una aplicación (pequeña) en detalle y utiliza Redis para rastrear la cantidad de usuarios en línea. Primero cree un paquete. El archivo JSON contiene dos archivos adjuntos, uno para el cliente Redis y el otro para el expreso mismo. También asegúrese de haber envuelto a Redis y correr por $ Redis-Server.
{"Nombre": "App", "Versión": "0.0.1", "Dependencias": {"Express": "3.x", "Redis": "*"}}A continuación, debe crear una aplicación y una conexión a Redis:
var express = request ('express'); var redis = require ('redis'); var db = redis.createClient (); var app = express ();El siguiente middleware rastrea a los usuarios en línea. Aquí usaremos el conjunto ordenado para que podamos consultar a los usuarios en línea por Redis, que solo toma N milisegundos. Utilizamos marcas de tiempo como "estándar en línea" para los miembros. Tenga en cuenta que aquí usamos la cadena de agente de usuario en lugar de la ID de usuario habitual.
app.use (function (req, res, next) {var ua = req.headers ['user-agent']; db.zadd ('en línea', date.now (), ua, next);});El siguiente middleware es usar ZrevrangebyScore en el último minuto para obtener el número máximo de usuarios en línea, siempre obtenemos los usuarios en línea más recientes, y su límite superior es la marca de tiempo actual menos 60000 milisegundos.
app.use (function (req, res, next) {var min = 60 * 1000; var que logoe = date.now () - min; db.zrevrangebyscore ('en línea', '+inf', ago, function (err, users) {if (err) return next (err); req.online = users; next ();});});¡Finalmente, lo usamos a través de una URL y la vinculamos a un puerto! Eso es todo, acceder a esta aplicación en un nuevo navegador y verá un aumento en el número de personas en línea.
app.get ('/', function (req, res) {res.send (req.Online.length + 'ussers en línea');}); app.listen (3000);Proxy inverso para express
Usar express detrás del proxy inverso, como el barniz o nginx es trivial, sin embargo, requiere la configuración. Al habilitar el "Proxy de confianza" APP.ENABLE ("Proxy de confianza"), Express tiene algunos trucos para la representación inversa, los campos de encabezado X-Forward-* pueden ser confiables, de lo contrario pueden ser fácilmente engañados.
Habilitar esta configuración tiene algunos efectos sutiles. El primero es que el proxy inverso se puede establecer X-Forwarded, diciéndole a la aplicación que es HTTPS o simplemente un simple HTTP. Este valor se refleja en req.protocol.
El segundo cambio es que los valores REQ.IP y REQ.IPS llenarán la lista de direcciones X-Forwarded para.
Depugs Express
Express utiliza el módulo de depuración internamente para registrar información sobre la coincidencia de rutas y los patrones de aplicación. Para ver este mensaje, simplemente establezca la variable de entorno de depuración en Express:*, y después de comenzar la aplicación, verá la información de depuración en la consola.
$ Debug = express:* nodo ./bin/www
Ejecutar este ejemplo de Hello World imprimirá lo siguiente:
Express: arranque de aplicación en modo de desarrollo +0msexpress: enrutador definido get /hello.txt +0msexpress: enrutador definido get /hello.txt +1ms
Además, el programa generado expresando ejecutable (generador) también usa un módulo de depuración, y el alcance predeterminado es el espacio de nombres de depuración de my-aplicaciones.
Puede habilitar estas declaraciones de depuración con el siguiente comando
$ Debug = My-Application Node ./bin/www
Para obtener más información sobre la depuración, consulte la guía de depuración