我在快递应用中提供.png图片时出现问题。我认为路由器设置有问题,因为它试图渲染页面而不是提供静态文件。设置如下:
// app.js
// Module dependencies
var express = require('express'),
http = require('http'),
path = require('path'),
session = require('./middlewares/session');
// Create server
var app = module.exports = app ? app : express();
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.set('view options', { layout: true });
app.use(express.static(path.join(__dirname, '../../public')));
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.errorHandler());
app.use(express.responseTime());
app.use(express.cookieParser());
app.use(app.router);
var routes = require('./routes')(app);
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
// Start server
http.createServer(app).listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
console.log(__dirname);
});
然后我的路线文件如下所示:
// routes.js
module.exports = function(app) {
//Routes
// app.get('/', routes.index);
app.get('/api/places', places);
app.get('/add-review', review);
app.get('/logout', logout);
app.get('/:location?/:category?', session(app), routes.index);
}
我正在尝试加载图片的玉视图
# view
img(src="/nodeapp/img/logo-white.png")
我正在为节点应用程序使用反向代理,其根目录为http://app.com/nodeapp
文件夹结构:
public
components
css
img
js
server
srs
views
app.js
test
我得到的错误是:
TypeError: Cannot read property 'logo-white.png' of undefined
at Object.get_listings (/app/server/src/models/vendors.js:354:16)
at exports.index (/app/server/src/handlers/index.js:6:31)
at callbacks (/app/node_modules/express/lib/router/index.js:161:37)
at /app/server/src/middlewares/session.js:13:5
at /app/bbe/server/src/api.js:18:3
at _fulfilled (/app/node_modules/requestify/node_modules/q/q.js:798:54)
at self.promiseDispatch.done (/app/requestify/node_modules/q/q.js:827:30)
at Promise.promise.promiseDispatch (/app/node_modules/requestify/node_modules/q/q.js:760:13)
at /app/node_modules/requestify/node_modules/q/q.js:574:44
at flush (/app/node_modules/requestify/node_modules/q/q.js:108:17)
GET /img/logo-white.png 500 857ms
所以,在这里,它试图实际渲染我的玉视图,而不是从静态文件夹中提供服务。其他静态文件,如js和css可以很好地服务。为什么会这样?
谢谢!
===编辑(添加渲染视图的功能)===
exports.index = function(req, res) {
res.locals.location = data().get_location(req.params);
res.locals.categories = data().get_categories(res.locals.location);
res.locals.listings = data().get_listings(res.locals.location, req.params.category);
var meta = {
title: "My app",
module: "/nodeapp/js/core/index/main.js"
};
res.render('nodeapp/index', meta);
};
答案 0 :(得分:0)
设置“视图”路径时我自己也遇到了麻烦,所以也许问题是一样的。
我会尝试为我喜欢的不同网站设置不同的视图路径(每个应用)
// site1.js
app.set('views', __dirname + '/views/site1');
// site2.js
app.set('views', __dirname + '/views/site2');
由于某种原因,它只是找不到要渲染的视图。所以,我不得不将它们全部设置回'/ views'目录,当我渲染它们时,我在那里包含了额外的目录,这很有效。
我在想你是否重组了你的目录,所以这个
app.use(express.static(path.join(__dirname, '../../public')));
变为
app.use(express.static(path.join(__dirname, '/public')));
它可能会开始为你工作。我假设你的公共目录中的所有其他东西也没有正确处理。如果它只是那个png文件...检查名称,重命名它,摆弄它。