express教學 - node.js express初入門下集




錯誤:無法在Express中查找視圖 (6)

注意 :我在帖子末尾的自動回答

我正在嘗試更好地體驗nodeJS,我真的不想將所有腳本放在一個文件中。

所以,按照這裡的帖子我使用這個結構

./
 config/
   enviroment.js
   routes.js
 public/
   css/
     styles.css
   images
 views
   index
     index.jade
   section
     index.jade
   layout.jade
 app.js

我的文件現在是:

app.js

var express = require('express');
var app = module.exports = express.createServer();

require('./config/enviroment.js')(app, express);
require('./config/routes.js')(app);

app.listen(3000);

enviroment.js

module.exports = function(app, express) {
    app.configure(function() {
        app.use(express.logger());
        app.use(express.static(__dirname + '/public'));
        app.set('views', __dirname + '/views');
        app.set('view engine', 'jade'); //extension of views

    });

    //development configuration
    app.configure('development', function() {
        app.use(express.errorHandler({
            dumpExceptions: true,
            showStack: true
        }));
    });

    //production configuration
    app.configure('production', function() {
        app.use(express.errorHandler());
    });

};

routes.js

module.exports = function(app) {

    app.get(['/','/index', '/inicio'], function(req, res) {
        res.render('index/index');
    });

    app.get('/test', function(req, res) {
        //res.render('index/index');
    });

};

layout.jade

!!! 5
html
    head
        link(rel='stylesheet', href='/css/style.css')
        title Express + Jade
    body
        #main
            h1 Content goes here
            #container!= body

指數/ index.jade

h1 algoa

我得到的錯誤是:

錯誤:無法在渲染時在Function.render(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ application.js:495:17)中查找視圖“index / index”(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ response.js:614:9)在ServerResponse.render(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ response.js:638:5)at at c:\ xampp \ htdocs \ nodejs \ _bus \ config \ routes.js:4:7在回調中(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:177:11)在param(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:151:11)傳遞(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:158:5)在Object.router [作為句柄]的Router._dispatch(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:185:4) (c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ lib \ router \ index.js:45:10)at next(c:\ xampp \ htdocs \ nodejs \ _bus \ node_modules \ express \ node_modules \ connect \ LIB \ proto.js:191:15)

但我真的不知道問題是什麼......

我開始想的是因為模塊導出...

答:我發現的獨特解決方案是改變我定義app.set('views')和視圖引擎的地方

我把它移到了app.js,現在運行良好。

var express = require('express');
var app = module.exports = express.createServer();


require('./config/enviroment.js')(app, express);

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

require('./config/routes.js')(app);

app.listen(3000);

我真的不明白這背後的邏輯,但我會說它有一個。


npm install [email protected]安裝以前的版本,如果有幫助的話。

我知道在3.x中刪除了視圖佈局機制,但這可能不是你的問題。 也用express()替換express.createServer() express()

更新:

它是來自environment.js的__dirname
它應該是:

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

使用此代碼來解決問題

app.get('/', function(req, res){
    res.render("index");
});

它通過在app.js文件中添加以下代碼來解決

app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname);

app.get('/', function(req, res){
    res.render("index");
});

我將views文件夾名稱更改為views_render並且還面臨與上面相同的問題,因此重新啟動server.js並且它適用於我。


添加到@mihai的答案:

如果您在Windows中,那麼只需連接__dirname' + '../public' c:\dev\app\module../public __dirname' + '../public'將導致錯誤的目錄名稱(例如: c:\dev\app\module../public )。

而是使用path ,無論操作系統如何,都可以使用path

var path = require ('path');
app.use(express.static(path.join(__dirname + '.../public')));

path.join將規範化路徑分隔符,並返回正確的路徑值。


起初我有同樣的錯誤,我真的很生氣。 你只需要在模板的路徑之前有./

res.render('./index/index');

希望它有效,為我工作。