Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS posts.findOne(…返回404未找到_Javascript_Node.js_Pug_Monk - Fatal编程技术网

Javascript NodeJS posts.findOne(…返回404未找到

Javascript NodeJS posts.findOne(…返回404未找到,javascript,node.js,pug,monk,Javascript,Node.js,Pug,Monk,我正在整理一个来自NodeJs、Pug、Express、Monk等的博客,从db检索一篇文章时遇到问题。我一直收到一个404 not found错误。我不确定我做错了什么,但如果你能扫描我的代码,看看我是否遗漏了什么,我一定会非常感激 posts.js var express = require("express"); var router = express.Router(); var multer = require("multer"); var upload = multer({ dest

我正在整理一个来自NodeJs、Pug、Express、Monk等的博客,从db检索一篇文章时遇到问题。我一直收到一个404 not found错误。我不确定我做错了什么,但如果你能扫描我的代码,看看我是否遗漏了什么,我一定会非常感激

posts.js

var express = require("express");
var router = express.Router();
var multer = require("multer");
var upload = multer({ dest: "./public/images" });
var mongo = require("mongodb");
var db = require("monk")("localhost/nodeblog");

router.get("/show/:id", function (req, res, next) {
  var posts = db.get("posts");

  posts.findOne({ '_id': req.params.id }, function (err, post) {
    res.render("show", {
      'post': post
    });
  });
});
app.js

var express = require("express");
var path = require("path");
var favicon = require("serve-favicon");
var logger = require("morgan");
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var session = require("express-session");
var multer = require("multer");
var upload = multer({ dest: "./public/images" });
var expressValidator = require("express-validator");

var mongo = require("mongodb");
var db = require("monk")("localhost/nodeblog");

var routes = require("./routes/index");
var posts = require("./routes/posts");
var categories = require("./routes/categories");

var app = express();

app.locals.moment = require("moment");

app.locals.truncateText = function(text, length) {
  var truncatedText = text.substring(0, length);
  return truncatedText;
};

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger("dev"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

// Express Session
app.use(
  session({
    secret: "secret",
    saveUninitialized: true,
    resave: true
  })
);

// Express Validator
app.use(
  expressValidator({
    errorFormatter: function(param, msg, value) {
      var namespace = param.split("."),
        root = namespace.shift(),
        formParam = root;

      while (namespace.length) {
        formParam += "[" + namespace.shift() + "]";
      }
      return {
        param: formParam,
        msg: msg,
        value: value
      };
    }
  })
);

// Connect-Flash
app.use(require("connect-flash")());
app.use(function(req, res, next) {
  res.locals.messages = require("express-messages")(req, res);
  next();
});

// Make our db accessible to our router
app.use(function(req, res, next) {
  req.db = db;
  next();
});

app.use("/", routes);
app.use("/posts", posts);
app.use("/categories", categories);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error("Not Found");
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get("env") === "development") {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render("error", {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render("error", {
    message: err.message,
    error: {}
  });
});

module.exports = app;
categories.js index.js和posts.js都在routes文件夹中。 在视图文件夹中,我有addcategory.pug、addpost.pug、error.pug、index.pug、layout.pug和show.pug 如果您需要查看其中任何一个,请告诉我,我将编辑此查询。谢谢

index.js

var express = require("express");
var router = express.Router();
var mongo = require("mongodb");
var db = require("monk")("localhost/nodeblog");

/* GET home page. */
router.get("/", function(req, res, next) {
  var db = req.db;
  var posts = db.get("posts");
  posts.find({}, {}, function(err, posts) {
    res.render("index", { posts: posts });
  });
});

module.exports = router;
categories.js

var express = require("express");
var router = express.Router();
var mongo = require("mongodb");
var db = require("monk")("localhost/nodeblog");

router.get("/show/:category", function(req, res, next) {
  var posts = db.get("posts");

  posts.find({ category: req.params.category }, {}, function(err, posts) {
    res.render("index", {
      title: req.params.category,
      posts: posts
    });
  });
});

router.get("/add", function(req, res, next) {
  res.render("addcategory", {
    title: "Add Category"
  });
});

router.post("/add", function(req, res, next) {
  // Get Form Values
  var name = req.body.name;

  // Form Validation
  req.checkBody("name", "Name field is required").notEmpty();

  // Check Errors
  var errors = req.validationErrors();

  if (errors) {
    res.render("addpost", {
      errors: errors
    });
  } else {
    var categories = db.get("categories");
    categories.insert(
      {
        name: name
      },
      function(err, post) {
        if (err) {
          res.send(err);
        } else {
          req.flash("success", "Category Added");
          res.location("/");
          res.redirect("/");
        }
      }
    );
  }
});

module.exports = router;
哈巴狗

extends layout
block content
    .post
     h1=post.title
     p.meta Posted in 
      a.category-link(href='/categories/show/' + post.category) #{post.category} 
      | by #{post.author} on #{moment(post.date).format("MM-DD-YYYY")}
     img.main-image(src='/images/' + post.mainimage)
     !=post.body
原来我有

posts.findById(
但这也不起作用


在此方面的任何帮助都将不胜感激。请提前感谢。

此代码导致了此问题

app.use(function(req, res, next) {
  var err = new Error("Not Found");
  err.status = 404;
  next(err);
});

实际上,这段代码是一个中间件,它将每个请求的状态更改为404。

这段代码就是问题的根源

app.use(function(req, res, next) {
  var err = new Error("Not Found");
  err.status = 404;
  next(err);
});

实际上,这段代码是一个中间件,它将每个请求的状态更改为404。

您应该通过使用mongoDB模块将id参数转换为objectId来传递它

var ObjectId = require("mongodb").ObjectId;

router.get("/show/:id", function (req, res, next) {
  var posts = db.get("posts");

  posts.findOne({ '_id': new ObjectId(req.params.id }, function (err, post) {
    res.render("show", {
      'post': post
    });
  });
});```

应该通过使用mongoDB模块转换id参数,将其作为objectId传递

var ObjectId = require("mongodb").ObjectId;

router.get("/show/:id", function (req, res, next) {
  var posts = db.get("posts");

  posts.findOne({ '_id': new ObjectId(req.params.id }, function (err, post) {
    res.render("show", {
      'post': post
    });
  });
});```

我建议您使用
findById
,就像您通过
id
查找一样,并使用promise。在您的情况下,它将类似于:

posts.findById({ '_id': req.params.id })
.then(post => {
  res.render(post)
})
.catch(error => {
  console.log(error)
})

我建议您使用
findById
,就像您通过
id
查找一样,并使用promise。在您的情况下,它将类似于:

posts.findById({ '_id': req.params.id })
.then(post => {
  res.render(post)
})
.catch(error => {
  console.log(error)
})


我应该删除该代码吗?还是使用if?if err,err else''谢谢你,是的,删除它,因为我不确定它应该实现什么。删除该部分代码后,我现在无法获得/posts/show/。{post.\u id}是地址栏中显示的内容,这将是因为您的路由设置不正确。我需要查看路由中的代码并发布更新的问题。请告诉我是否应该添加其他内容,我会添加。谢谢。我应该删除该代码吗?还是使用if?if err,err else“”谢谢您删除它,因为我不确定我要添加什么t应该实现cannot GET/posts/show/是我在删除该部分代码后现在得到的。{post.\u id}是地址栏中显示的内容,这将是因为您的路线设置不正确。我需要查看路线中的代码并发布更新的问题。请告诉我是否需要添加其他内容,我会的。谢谢。我明天会尝试一下,并让您知道这是否有效。谢谢您的贡献。编辑:我已经提供了一次尝试,但不幸的是,它仍然给出相同的无法获取/posts/show/error。我明天会尝试一下,并让您知道这是否有效。感谢您的贡献。编辑:我尝试了一次,但不幸的是,它仍然给出相同的无法获取/posts/show/error。感谢您的帮助。不幸的是,由于我使用了Monk,我认为我不是我尝试了你的建议,但它给了我同样的结果。我可能会更好地使用mongoose。那么现在你正在使用mongoose?@ErikJamesRobles因为我是一个新手,我将不得不学习如何将我现有的代码转换成mongoose而不会太坏。与此同时,我将尝试提出一个解决方案ion并希望将其发布在此处,以防其他人与Monk有相同的问题。感谢您的帮助。不幸的是,由于我使用Monk,我认为我无法实现这一目标。我尝试了您的建议,但它给了我相同的结果。我可能会更好地使用mongoose。因此,现在您使用mongoose?@ErikJamesrobles,因为我是我是一个新手,我必须学会如何将我现有的代码转换成mongoose而不至于太坏。与此同时,我将尝试提出一个解决方案,希望能在这里发布,以防其他人与Monk有同样的问题。