Estoy construyendo un servidor super simple en un nodo y en mi oyente onRequest estoy tratando de determinar si debo servir un archivo estático (fuera del disco) o algo json (probablemente extraído de mongo) según la ruta en request.url
.La forma más rápida de verificar la existencia de un archivo en NodeJs
Actualmente estoy tratando de establecer el archivo primero (porque uso mtime en otro lugar) y si eso no falla, entonces leo los contenidos del disco. Algo como esto:
fs.stat(request.url.pathname, function(err, stat) {
if (!err) {
fs.readFile(request.url.pathname, function(err, contents) {
//serve file
});
}else {
//either pull data from mongo or serve 404 error
}
});
Aparte de cache el resultado de fs.stat
para la request.url.pathname
, ¿hay algo que podría acelerar este chequeo? Por ejemplo, ¿sería tan rápido para ver si fs.readFile
errores en lugar de stat
? ¿O usando fs.createReadStream
en lugar de fs.readFile
? ¿O podría verificar el archivo usando algo en child_process.spawn
? Básicamente solo quiero asegurarme de no pasar más tiempo jugando w/fileio cuando la solicitud debe enviarse a mongo para obtener datos ...
¡Gracias!
Siempre he usado '' stat' o statSync' en función de mis necesidades (por ejemplo ' statSync' in config), pero supongo que técnicamente sería más rápido hacer 'readfile' y atrapar un error (aunque la captura de errores es ___muy___ pesada en JS, así que podría estar equivocado). En general, sin embargo, preferiría usar 'stat' simplemente porque es más limpio que lanzar un error intencionalmente. Evite 'child_process' en general ya que' node' está presionando en los sistemas Windoze y cualquier código que lo use se romperá. –
@Lite Byte, debe aceptar seriamente la respuesta dada por DeadDEnD ... –