我正在写一个关于glitch.me的小node.js应用程序,我遇到了一个我不太懂的问题。它是一种消息板(freeCodeCamp的一个项目),你可以发布一个线程(指定一个板),然后查看板上的消息列表。线程存储在mongodb集合中。通过req.params.board
访问董事会的名称。问题是,req.params.board
在两个函数调用之间以某种方式缩短了1个符号。
这是我的路由文件和我的处理程序(在一个单独的模块中),在处理程序中有console.logs,它将显示我的意思。我们假设我们在' newBoard'板:
api.js
module.exports = function (app) {
app.route('/api/threads/:board')
.get(threadHandler.getThreads)
.post(threadHandler.postThread)
.delete(threadHandler.deleteThread)
.put(threadHandler.reportThread)
app.route('/api/replies/:board')
.post(threadHandler.postReply)
.get(threadHandler.getReplies)
.delete(threadHandler.deleteReply)
.put(threadHandler.reportReply)
};
处理程序:
module.exports.postThread = function(req, res){
console.log(req.params.board); //logs newBoard
var newThread = new Thread({
text: req.body.text,
delete_password: req.body.delete_password,
created_on: new Date(),
bumped_on: new Date(),
reported: false,
replies: [],
replycount: 0,
board: req.params.board
})
newThread.save();
res.redirect('/b/'+req.params.board);
}
module.exports.getThreads = function(req, res){
//gets 10 last messages on the board
console.log(req.params.board); //logs newBoar
Thread.find({}).sort({bumped_on: -1}).limit(10).exec(function (err, docs){
if (err) return;
docs.forEach(function(doc)
{
if(doc.replies.length > 3) {
doc.replies = doc.replies.slice(-3);
}
})
res.json(docs);
})
}
module.exports.getReplies = function(req, res){
//gets a separate thread with all the replies
console.log(req.params.board, 'reply'); //logs newBoard + _id of the thread, so the url is '/newBoard/5900d2da926ef6277e143564' it will log '/newBoard5900d2da926ef6277e143564', 'eating' the slash between board and id.
Thread.findById(req.query.thread_id, function(err, foundThread){
if (err) return;
if (foundThread){
res.json(foundThread);
}
})
}
我不明白发生了什么,所以如果有人告诉我它为什么会发生以及如何解决它,我真的很感激。我的整个项目都在这里:https://glitch.com/edit/#!/shrouded-consonant
答案 0 :(得分:3)
您正在重定向到import numpy as np
import matplotlib.pyplot as plt
bins = 10
data = np.random.randn(1000, 3)
colors = ['blue','green', 'red']
plt.hist(data, bins, histtype='bar', color=colors, stacked=True, fill=True)
plt.show()
,但your HTML执行此操作:
/b/newBoard
它假定重定向到var currentBoard = window.location.pathname.slice(3,-1);
;使用/b/newBoard/
,它正在尝试切割不存在的尾部斜杠。因此-1
。
最简单的解决方案是修复重定向:
newBoar