最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

app.get()无法找到并显示正确的模板(玉)页面

IT培训 admin 3浏览 0评论

app.get()无法找到并显示正确的模板(玉)页面

我正在研究使用express,jade,node.JS的非常基本的Server Side JS。

在第一页(localhost / topic),有一个列表。和List的数据来自MySQL。 (MySQL字段是id,title,description和author)此外,还有一个链接可以打开表单(表单在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')
回答如下:

这是路线安排的问题。

TLDR

app.get的路径定义移到先前声明的路线之上。

说明

快递中的路线定义是从上到下的方法。因此,在运行时,您的路由如下所示:

  • /topic
  • /topic/:id
  • topic/add

当你访问页面/topic/add时,你会期望它与列表中的第三个匹配,但Express实际上将它与列表中的第二个匹配...如果你在/topic之后放置任何内容,它将实际匹配所有内容。

app.get()无法找到并显示正确的模板(玉)页面

我正在研究使用express,jade,node.JS的非常基本的Server Side JS。

在第一页(localhost / topic),有一个列表。和List的数据来自MySQL。 (MySQL字段是id,title,description和author)此外,还有一个链接可以打开表单(表单在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')
回答如下:

这是路线安排的问题。

TLDR

app.get的路径定义移到先前声明的路线之上。

说明

快递中的路线定义是从上到下的方法。因此,在运行时,您的路由如下所示:

  • /topic
  • /topic/:id
  • topic/add

当你访问页面/topic/add时,你会期望它与列表中的第三个匹配,但Express实际上将它与列表中的第二个匹配...如果你在/topic之后放置任何内容,它将实际匹配所有内容。

发布评论

评论列表 (0)

  1. 暂无评论