nodejs+express 搭建博客 二(一些重要的问题和点)

本文介绍了在使用Node.js+Express搭建博客时遇到的一些问题及解决办法,包括CSS路径问题、版本不兼容、前后端数据交互、文本编辑器配置、索引重复和内容大小限制等。通过实例详细解析了这些问题的产生原因和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入CSS文件时的路径问题

在view/index.ejs中引用public/stylesheets 目录下的style.css 文件时,报错如下

引入该css文件的实现是这样的

<link href="../public/stylesheets/style.css" rel="stylesheet">
why?
 

原来,在app.js中已经通过app.use(express.static(__dirname+'/public'))配置了静态文件服务器。

所以,在引用css文件时只需要直接写 <link href="/stylesheets/style.css" rel="stylesheet">就行,  系统会自动把它定向到app.js所在的目录的子目录(与app.js同级的目录)中的文件。

版本问题

本次博客的搭建参考的是《node.js开发指南》一书,但是由于我正在看的该书版本太旧,其中的很多地方已经不再被express4.x支持,在搭建的过程中遇到了非常多的问题,比如:

mongoDB的连接、req.session(新版本的express已经不再支持req.flash)等等等等

解决方法就是:

去查看node_module下对应的readme.txt文件,当中提到了在不同版本下该如何配置如何使用。比如 数据库连接 就去查看 connect-mongo模块。

上网搜索解决方法。

页面引用

怎么在一个页面中引用其他页面呢,比如引用 分页、左侧栏等。解决方法如下

<% include side.html %>

返回数据给前端

前后端之间的数据交互是避免不了的,怎样才能从后端返回数据给前端呢? 比如,根据博客标题的关键字进行搜索,需要返回所有包含该关键字的博客

(后端收到该请求,获取关键字keyWord,根据关键字查询数据库,将结果保存在articles中并通过send()方法返回给前端)
(使用Ajax实现数据交互,传递关键字,并在回调函数中接收后端返回的数据)

根据mongoDB的关键字_id进行查询

var  ObjectId=require('mongodb').ObjectId;
colelction.find({_id:ObjectId("56f3af63fd44e91e17f215da")})
在Robmongodb端,


 

配置文本编辑器

书写博客时,格式,字体、颜色、插入图片、插入链接、背景色、字体颜色等等功能的应用会让博客看起来更加直观,阅读性更佳。若要自己去实现各写功能目前还不现实,所以,比较靠谱的办法是引用现成的编辑器(提供以上功能)。

在经过一番查找和筛选之后,最终选定了summernote编辑器。它的引用也很简单

<div id="summernote"></div>
$("#summernote").summernote();
获取编辑的内容

var content=$("#summernote").code();

一个问题

上面,已经成功的配置了文本编辑器并能获取编辑的内容把它存储到数据库。但是在测试过程中又发现了新的问题.......

在添加博客,或者修改博客时,给内容设置字体、颜色、背景色等等时,出现如下情况

成功保存,再次查看该博客全部内容时,问题出现了,返回结果成了下面这样!!!

这中间发生了什么,怎么博客内容成了这样呢?这一问题困扰了一段时间,偶然间做了一次查询操作,发现查询结果是正常显示的(即使对博客内容进行各种样式设置),如下图

测试了n次,发现查询结果总是可以正常显示的,


那,查询结果页、首页、编辑页,查看全部内容页 等页面之间的渲染方式是否有所不同呢?

在仔细排查了相关页面之后发现了症结所在.......

是表达式输出方式<%-%> 和<%=%> 的问题,两者都是用于输出内容,但又有所不同

<%-%>:不会经过任何转义、直接输出

<%=%>:输出的内容会进行HTML转义。如<div>hahah</div>输出后会变成&lt;div&gt;hahah&lt;/div&gt;

索引重复

在发布新博客时,报错如下

图中显示,索引重复。

目前,是将博客的发布时间作为索引的

collection.ensureIndex('articlePubTime',{nuique:true});
怎么会出现这样的错误了,想了半天想起之前是将博客标题articleTitle设置为索引的,后来才修改为articlePubTime的。难道是因为这个?

然后在robmongo上手动查询了下目前的数据库索引

结果显示,竟然有三个索引!!

mongodb 有个默认的_id 的键,他相当于主键的角色。集合创建后系统会自动创建一个索引在"_id"键上,他是默认的索引,索引名叫 "_id_",是无法被删除的

这么算下来,有3个索引是对的,目前的工作是删除不需要的索引articleTitle。

db.getCollection('article').dropIndex({'articleTitle':-1});
 

再次查看索引,结果显示索引articleTitle已经成功删除。博客也可以正常添加了。

内容过大

测试文本编辑器功能时,发现一个问题,每当添加一个大的图片或文章内容本身太多时,发生如下报错

status:413 -------- 请求实体过大         也就是说,内容太多了超出服务器的处理能力,在这里服务器默认的实体最大为limit:102400b(100kb)

解决方法: 手动将请求实体的limit改为5mb

app.use(bodyParser.urlencoded({limit:"5mb"}));

requireJs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值