我正在研究使用Express,Jade,node.JS的非常基本的Serverside JS。
在第一页(本地主机/主题)上,有一个列表。并列出来自MySQL的数据。 (MySQL字段是id,标题,描述和作者) 另外,还有一个打开表单的链接(该表单位于add.jade文件中),可以在列表中添加项目。
我的问题是,如果单击链接,页面仍显示view.jade。但是,地址更改为“ localhost / topic / add”。
我已经检查了“ app.js”文件,看是否没有正确设置app.get()。但是我没有找到任何东西。 实际上,模板最初是用玉写的。但是我试图把玉变成哈巴狗。发生此错误后,我将它们全部放回玉石中。 有问题吗?
谢谢。
var express = require("express");
var app = express();
app.set("views", "./views_mysql");
app.set("view engine", "jade");
app.listen(3000, function() {
console.log("Connected, 3000 port!");
});
app.locals.pretty = true;
var mysql = require("mysql");
var conn = mysql.createConnection({
host: "localhost",
user: "jimin",
password: "****",
database: "o2"
});
conn.connect();
app.get(["/topic", "/topic/:id"], function(req, res) {
var sql = "SELECT id, title FROM topic";
conn.query(sql, function(err, topics, fields) {
var id = req.params.id;
if (id) {
var sql = "SELECT * FROM topic WHERE id=?";
conn.query(sql, [id], function(err, id_topics, fields) {
if (err) {
console.log(err);
res.status(500).send("Internal Server Error");
} else {
res.render("view", { topics: topics, topic: id_topics[0] });
}
});
} else {
res.render("view", { topics: topics });
}
});
});
app.get("/topic/add", function(req, res) {
var sql = "SELECT id, title FROM topic";
conn.query(sql, function(err, topics, fields) {
if (err) {
console.log(err);
res.status(500).send("Internal Server Error");
} else {
res.render("add", { topics: topics });
}
});
});
<!-- begin snippet: js hide: false console: true babel: false -->
// add.jade
doctype html
html
head
meta(charset='utf-8')
body
h1
a(href='/topic') Server Side JavaScript
ul
each topic in topics
li
a(href='/topic/' + topic.id)= topic.title
article
form(action='/topic/add' method='post')
p
input(type='text' name='title' placeholder='title')
p
textarea(name='description' placeholder='description')
p
input(type='text' name='author' placeholder='author')
p
input(type='submit')
//view.jade
doctype html
html
head
meta(charset='utf-8')
body
h1
a(href='/topic') Server Side JavaScript
ul
each topic in topics
li
a(href='/topic/' + topic.id)= topic.title
article
if topic
h2= topic.title
= topic.description
div= 'by ' + topic.author
else
h2 Welcome
| This is Server Side JS Tutorial
div
a(href='/topic/add') add Topic
app.get("/topic/add", function(req, res) {
var sql = "SELECT id, title FROM topic";
conn.query(sql, function(err, topics, fields) {
if (err) {
console.log(err);
res.status(500).send("Internal Server Error");
} else {
res.render("add", { topics: topics });
}
});
});
答案 0 :(得分:0)
这是路线安排的问题。
TLDR
将app.get
的路线定义移到先前声明的路线上方。
说明
快速路由定义是从上到下的方法。因此,在运行时,您的路由如下所示:
/topic
/topic/:id
topic/add
当您访问页面/topic/add
时,您希望它与列表中的第三个匹配,但是Express实际上将其与列表中的第二个匹配...实际上与所有内容都匹配 如果您在/topic
之后加上任何内容。