index.jade 没有出现在本地主机上

index.jade is not appearing on localhost

我一直在学习使用 node.js、express 和 jade 构建 Web 应用程序和数据库的教程。
https://cozy.io/en/hack/getting-started/first-app.html
尽管布局相同,但我的 index.jade 并未在本地主机上加载。在浏览器终端上没有错误提示原因。我已经检查了我的环境变量是否已设置,并且我已将文件路径更改为 index.jade,但它没有任何区别,只是一个白屏。在我的命令提示符下,服务器正在侦听并且数据库已连接。

My environment folder is   
C:\foodshop and within this I have  
node_modules,   
index.jade,   
package.json,   
shopDB.db,   
simpleserver.js

simpleserver.js 包含以下 -

// This is the server.
var http = require('http'),
    express = require('express'),
    app = express(),
    sqlite3 = require('sqlite3').verbose(),
    db = new sqlite3.Database('shopDB.db', (function(err) {
        if (!err) {
            console.log("Database is connected ... \n\n");
        } else {
            console.log("Error connecting database, check for shopDB.db file... \n\n");
        }
    }));

/* We add configure directive to tell express to use Jade to                   
   render templates */
app.get('env', (function() {
    app.set('views', __dirname + '');
    app.engine('.html', require('jade').__express);

    // Allows express to get data from POST requests
    app.use(express.bodyParser());
}));

// Database initialization (First list names of tables and check if currently exists.)                                                 
db.get("SELECT name FROM sqlite_master WHERE type='table' AND name='itemList'", function(err, row) {
    if (err !== null) {
        console.log(err);
    } else if (row == null) {
        db.run('CREATE TABLE IF NOT EXISTS  "itemList" ("ID" INTEGER PRIMARY KEY NOT NULL, "itemName" VARCHAR(100) NOT NULL, "itemWeight" INT(5) NOT NULL, "expiryDate" DATE, "itemPrice" double DEFAULT NULL)', function(err) {
            if (err !== null) {
                console.log(err);
            } else {
                console.log("SQL Table 'itemList' initialized.");
            }
        });
    } else {
        console.log("SQL Table 'itemList' already initialized.");
    }
});

// We render the templates with the data                              
app.get('/', function(req, res) {

    db.all('SELECT * FROM itemList ORDER BY itemName', function(err, row) {
        if (err !== null) {
            res.send(500, "An error has occurred -- " + err);
        } else {
            //res.sendfile('./public/index.html')
            res.render('./index.jade', {
                itemList: row
            }, function(err, html) {
                //res.sendfile('./index.jade')
                //res.send(200, html);
                res.status(200).send(html);
            });
        }
    });
});

// We define a new route that will handle item creation                      
app.post('/add', function(req, res) {

    ID = req.body.ID;
    itemName = req.body.itemName;
    itemWeight = req.body.itemWeight;
    expiryDate = req.body.expiryDate;
    itemPrice = req.body.itemPrice;

    sqlRequest = "INSERT INTO 'itemList' (ID, itemName, itemWeight, expiryDate, itemPrice) VALUES('" + ID + "', '" + itemName + "', '" + itemWeight + "', '" + expiryDate + "', '" + itemPrice + "')"
    db.run(sqlRequest, function(err) {
        if (err !== null) {
            res.send(500, "An error has occurred -- " + err);
        } else {
            res.redirect('back');
        }
    });
});

// We define another route that will handle item deletion                     
app.get('/delete/:itemName', function(req, res) {
    db.run("DELETE FROM itemList WHERE itemName='" + req.params.itemName + "'", function(err) {
        if (err !== null) {
            res.send(500, "An error has occurred -- " + err);
        } else {
            res.redirect('back');
        }
    });
});

/* This will allow Cozy to run your app smoothly but
 it won't break other execution environment */
var port = process.env.PORT || 9250;
var host = process.env.HOST || "127.0.0.1";

// Starts the server itself
var server = http.createServer(app).listen(port, host, function() {
    console.log("Server listening to %s:%d within %s environment",
        host, port, app.get('env'));
}); 

这是 index.jade 文件

doctype 5
html(lang="en")
  head
    title Items

  body


    form(action="add", method="post")
        label ID:
        input(type="text", name="ID")
        label itemName:
        input(type="text", name="itemName")
        label itemWeight:
        input(type='text', name='itemWeight')
        label expiryDate:
        input(type='text', name='expiryDate')
        label itemPrice:
        input(type='text', name='itemPrice')
        input(type="submit", value="Add a new item")

    ul
        - for(item in itemList) {
            li
                a(href=itemList[item].url)= itemList[item].itemName
                |  - (
                a(href="delete/#{itemList[item].id}") delete
                | )
        - }

我遵循了相同的教程,并到达了他们从 Jade 模板开始的部分,并且遇到了与您完全相同的问题。我退后了一点,从 Jade 网站上抓取了示例模板,它运行良好。我稍微更改了 Cozy 的 "bookmark" 模板并使其正常工作。你可以试试这个:

doctype html

不同的文档类型对我的示例产生了影响。我不是 Jade 方面的专家,但我肯定会尝试一下,看看你是否有运气。

编辑:进一步查看后,看起来 doctype 5 已被弃用,现在推荐使用 doctype html

另一个编辑:如果您的视图渲染仍然有问题,我会做两件事。第一,我会检查教程,将他们的 jade 视图与您的相匹配,并开始一次添加一个东西,直到它中断以缩小问题范围。二,我会改变:

app.get('env', (function() {
    app.set('views', __dirname + '');
    app.engine('.html', require('jade').__express);

    // Allows express to get data from POST requests
    app.use(express.bodyParser());
}));

app.set('views', __dirname + '');
app.engine('.html', require('jade').__express);

// Allows express to get data from POST requests
app.use(express.bodyParser());

您似乎没有使用环境。变量,我看不出有任何理由将您的视图渲染器设置移动到其中。将它移到顶部(如示例中所示),看看是否适合您。