我正在整理来自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(
但那也不起作用。
在此方面的任何帮助将不胜感激。预先谢谢你。
尝试将'_id'
中的_id
替换为findOne
:
posts.findOne({ _id: req.params.id }, ....)
此代码引起问题。
app.use(function(req, res, next) {
var err = new Error("Not Found");
err.status = 404;
next(err);
});
有效地,此代码是将每个请求的状态更改为404的中间件。