我一直在按照本教程使用node.js,express和jade构建Web应用程序和数据库。
https://cozy.io/en/hack/getting-started/first-app.html
尽管布局相同,但我的index.jade并未在localhost上加载。在浏览器终端上没有错误提示原因。我检查了我的环境变量是否已设置,并且我已将文件路径更改为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的“书签”模板并使其正常工作。您可以尝试以下方法:
doctype html
在我的示例中,不同的文档类型有所不同。我不是Jade的专家,但我绝对会尝试一下,看看您是否有运气。
编辑:进一步查看后,似乎已弃用
doctype 5
,现在建议使用doctype html
。另一个编辑:如果您仍然在视图渲染方面遇到问题,我将做两件事。首先,我将检查本教程,使其与您的翡翠视图匹配,然后一次添加一个,直到它破裂以缩小问题范围。二,我会改变:
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());
您似乎没有使用环境。变量,而且我看不出有任何理由在其中移动视图渲染器设置。将其移至顶部(如示例中所示),看看是否适合您。
关于node.js - index.jade没有出现在本地主机上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31945140/