NodeJS posts.findOne(...未返回404

问题描述 投票:1回答:2

我正在整理来自NodeJs,Pug,Express,Monk等的博客,但无法从数据库检索单个帖子。我不断收到404找不到错误。我不确定自己在做什么错,但是如果您可以扫描我的代码并查看我是否缺少某些东西,我将不胜感激。

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;

show.pug扩展布局

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(

但那也不起作用。

在此方面的任何帮助将不胜感激。预先谢谢你。

javascript node.js pug
2个回答
0
投票

尝试将'_id'中的_id替换为findOne

posts.findOne({ _id: req.params.id }, ....)

0
投票

此代码引起问题。

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

有效地,此代码是将每个请求的状态更改为404的中间件。

© www.soinside.com 2019 - 2024. All rights reserved.