Comment extraire des images à partir de node.js serveur du dossier dans l'URL?
Quelqu'un sait comment faire pour récupérer des images à partir de node.js serveur du dossier dans l'URL?
Dans ma structure de dossier que j'ai données du dossier et à l'intérieur il y a un sous-dossier img de l'image. Je veux accéder à cette image avec l'URL, comme ceci:
http://localhost:3000/data/img/default.jpg
mais quand je rentre dans le navigateur j'ai toujours cette erreur:
Page Non Trouvée /data/img/default.jpg n'est pas un chemin d'accès valide.
server.js:
'use strict';
/**
* Module dependencies.
*/
var init = require('./config/init')(),
config = require('./config/config'),
mongoose = require('mongoose');
var express = require('express');
/**
* Main application entry file.
* Please note that the order of loading is important.
*/
//Bootstrap db connection
var db = mongoose.connect(config.db, function(err) {
if (err) {
console.error('\x1b[31m', 'Could not connect to MongoDB!');
console.log(err);
}
});
//Init the express application
var app = require('./config/express')(db);
//Bootstrap passport config
require('./config/passport')();
app.use(express.static('data/img'));
//Start the app by listening on <port>
app.listen(config.port);
//Expose app
exports = module.exports = app;
//Logging initialization
console.log('MEAN.JS application started on port ' + config.port);
express.js:
'use strict';
/**
* Module dependencies.
*/
var express = require('express'),
morgan = require('morgan'),
bodyParser = require('body-parser'),
session = require('express-session'),
compress = require('compression'),
methodOverride = require('method-override'),
cookieParser = require('cookie-parser'),
helmet = require('helmet'),
passport = require('passport'),
mongoStore = require('connect-mongo')({
session: session
}),
flash = require('connect-flash'),
config = require('./config'),
consolidate = require('consolidate'),
path = require('path');
module.exports = function(db) {
//Initialize express app
var app = express();
//Globbing model files
config.getGlobbedFiles('./app/models/**/*.js').forEach(function(modelPath) {
require(path.resolve(modelPath));
});
//Setting application local variables
app.locals.title = config.app.title;
app.locals.description = config.app.description;
app.locals.keywords = config.app.keywords;
app.locals.facebookAppId = config.facebook.clientID;
app.locals.jsFiles = config.getJavaScriptAssets();
app.locals.cssFiles = config.getCSSAssets();
//Passing the request url to environment locals
app.use(function(req, res, next) {
res.locals.url = req.protocol + '://' + req.headers.host + req.url;
next();
});
//Should be placed before express.static
app.use(compress({
filter: function(req, res) {
return (/json|text|javascript|css/).test(res.getHeader('Content-Type'));
},
level: 9
}));
//Showing stack errors
app.set('showStackError', true);
//Set swig as the template engine
app.engine('server.view.html', consolidate[config.templateEngine]);
//Set views path and view engine
app.set('view engine', 'server.view.html');
app.set('views', './app/views');
//Environment dependent middleware
if (process.env.NODE_ENV === 'development') {
//Enable logger (morgan)
app.use(morgan('dev'));
//Disable views cache
app.set('view cache', false);
} else if (process.env.NODE_ENV === 'production') {
app.locals.cache = 'memory';
}
//Request body parsing middleware should be above methodOverride
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(methodOverride());
//Enable jsonp
app.enable('jsonp callback');
//CookieParser should be above session
app.use(cookieParser());
//Express MongoDB session storage
app.use(session({
saveUninitialized: true,
resave: true,
secret: config.sessionSecret,
store: new mongoStore({
db: db.connection.db,
collection: config.sessionCollection
})
}));
//use passport session
app.use(passport.initialize());
app.use(passport.session());
//connect flash for flash messages
app.use(flash());
//Use helmet to secure Express headers
app.use(helmet.xframe());
app.use(helmet.xssFilter());
app.use(helmet.nosniff());
app.use(helmet.ienoopen());
app.disable('x-powered-by');
//Setting the app router and static folder
app.use(express.static(path.resolve('./public')));
//Globbing routing files
config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) {
require(path.resolve(routePath))(app);
});
//Assume 'not found' in the error msgs is a 404. this is somewhat silly, but valid, you can do whatever you like, set properties, use instanceof etc.
app.use(function(err, req, res, next) {
//If the error object doesn't exists
if (!err) return next();
//Log it
console.error(err.stack);
//Error page
res.status(500).render('500', {
error: err.stack
});
});
//Assume 404 since no middleware responded
app.use(function(req, res) {
res.status(404).render('404', {
url: req.originalUrl,
error: 'Not Found'
});
});
return app;
};
merci de poster votre code serveur. Il ya quelques façons de le faire. rappelez-vous, le noeud n'est pas apache. Tout ce que vous voulez faire, vous devez l'activer. Vous êtes probablement manque juste la config pour accéder aux fichiers.
en fait il a été généré par YO signifie générateur. J'ai trouvé quelques solutions comme ceci:var express = require('express'); var app = express.createServer(); app.utilisation(express.statique(__dirname + '/public")); app.listen(8080); mais je suis très nouveau à node.js et ne savent pas comment l'appliquer dans mon application et de toute aide est très appriciated
express.statique est exactement ce que j'allais dire. Vous pouvez placer qu'avec votre application existante.usage() consolidés. J'ai toujours mis ce truc dans
ok, donc quand j'ai l'image dans le répertoire data/img(dossier de données est dans le même dir comme server.js) la commande ressemblera à ceci: app.utilisation ("/static', express.statique (données/img'));? parce que quand j'ai mis cette commande dans server.js et de mettre cette adresse dans le navigateur localhost:3000/static/default.jpg j'ai eu le même message d'erreur
en fait il a été généré par YO signifie générateur. J'ai trouvé quelques solutions comme ceci:var express = require('express'); var app = express.createServer(); app.utilisation(express.statique(__dirname + '/public")); app.listen(8080); mais je suis très nouveau à node.js et ne savent pas comment l'appliquer dans mon application et de toute aide est très appriciated
express.statique est exactement ce que j'allais dire. Vous pouvez placer qu'avec votre application existante.usage() consolidés. J'ai toujours mis ce truc dans
app.configure();
mais je ne pense pas que c'est nécessaire.ok, donc quand j'ai l'image dans le répertoire data/img(dossier de données est dans le même dir comme server.js) la commande ressemblera à ceci: app.utilisation ("/static', express.statique (données/img'));? parce que quand j'ai mis cette commande dans server.js et de mettre cette adresse dans le navigateur localhost:3000/static/default.jpg j'ai eu le même message d'erreur
OriginalL'auteur mark | 2014-11-20
Vous devez vous connecter pour publier un commentaire.
C'est comme si vous avez déjà mis vos données/img dossier statique dossier dans la ligne ci-dessous:
Dans ce cas, vous devez accéder à des images placées dans la statique du dossier ci-dessus en utilisant l'url ci-dessous:
Je vais cependant vous conseiller l'utilisation du Nœud de variable globale __dirname pour indiquer la racine de la statique dossier, mais cela dépend de l'endroit où votre server.js est situé à l'intérieur de la structure de votre fichier.
Le fichier js contenant les extraits de code ci-dessous est situé à la racine et j'ai /data/img dossier à partir de la racine et je suis en mesure de récupérer l'image à l'aide de /nom de l'image.
Voir si cela vous aide. Si elle le fait, assurez-vous de connaître la raison de l'utilisation de l' __dirname nom de la variable globale.
RS1
OriginalL'auteur SOJ