用Nodejs 4.X版本,制作一个微博网站(多图,详细步骤)
nodejs吧
全部回复
仅看楼主
level 1
零点风云 楼主
全文大概1w4字。图很多,链接是CSDN的。
————————分割线————————————
博文已完成,版本号v1.0
范例网址:121.41.66.68
【0】涉及到的框架、引擎、数据库:
① express 4.X
② jade
③ mysql 5.7.x
注:
①内容较长,我会尽力把整个框架、结构、顺序、思考方式说明白。
②基础是《node.js开发指南》这本书,作者:BYVoid。但他书的版本较老,很多东西现在已经无法应用,故进行更新,使用目前普遍的express 4.x版本(原书似乎是2.X版本),mysql(原书是mongodb),jade(原书是ejs)
【1】基本需求:
①有首页;
②支持注册;
③支持登录、登出;
④可以发表博客,发表的博客可以保存到数据库;
⑤可以查看博客,博客从数据库中读取,为了简化,这里设置为查看所有人的博客;
⑥查看博客时,初始查看的数量有限,但可以无限加载新的博客,直到查看完全部博客;
⑦一定程度上实现多语言(即可以切换显示的语言版本),但由于复杂度所限,因此只部分实现(但框架已建立好,可以通过继续完善代码实现整体的国际化);
⑧根据登录状态,对可以访问的页面进行控制(某些允许某些禁止)
————————分割线————————————
【6】把启动的app.js放在后台运行,并且在操作端解除控制后依然可以运行
原本使用npm start的地方,输入
nohup npm start&
即可
————————分割线————————————
【7】app.js之解释
app.js可以说是一切的根本,因此请看注释,解释了每行代码的作用:
[javascript] view plain copy
var express = require('express'); //这个模块在node_modules文件夹中
var path = require('path'); //nodejs自带的,路径相关
var favicon = require('serve-favicon'); //node_modules文件夹中
var logger = require('morgan'); //日志相关,node_modules文件夹中,具体看第19行代码
var cookieParser = require('cookie-parser');//node_modules文件夹中,用来解析cookie的,被express所调用
var bodyParser = require('body-parser'); //用于解析请求体的(应该),被express所调用
var routes = require('./routes/index'); //这里是默认的路由,路径是routes/index.js
var users = require('./routes/users'); //这里是默认的路由,路径是routes/users.js
//关于路由的更多内容看下面的app.use('/', routes);和app.use('/users', users);的注释
var app = express(); //生成一个express的实例
//设置模板引擎
app.set('views', path.join(__dirname, 'views')); //__dirname表示绝对路径
//console.log(__dirname) //可以取消这一行注释,然后看看__dirname的效果
app.set('view engine', 'jade'); //表示express是使用jade格式的模板的
//下面这行代码是设置左上角的小图标的,将其命名为favicon.ico并放在public文件夹下,如果有的话,取消这行注释
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev')); //设置日志显示,如果不需要的话可以注释掉这行代码,建议练手的时候不要注释掉
//可替换参数有default,combined,common,short,tiny,dev(相对tiny有染色)。可以自己试试效果,默认是dev
app.use(bodyParser.json()); //解析客户端的请求,通常是通过post发送的内容
app.use(bodyParser.urlencoded({extended: false})); //另一种解析方式,具体不太明白(如果上面解析失败的话会通过这个来)
app.use(cookieParser()); //cookies的解析
app.use(express.static(path.join(__dirname, 'public'))); //普通静态html文件、js文件、css文件,都放在public文件夹下,可以直接通过url来访问
//路由的处理
app.use('/', routes); //假如访问的网址是根目录,例如http://121.41.66.68/,交给routes这个js文件来处理,具体请查看routes
app.use('/users', users); //假如访问的是/users这样的路径,那么交给users这个js文件来处理,具体略
//我们最后要对这个路由进行处理,让他按照我们想要的方式来做
//这里对非法路径进行处理的,next表示这是一个中间件(即执行完他之后,还会执行下一个,而不是直接在这里结束了)
//如果上面没有静态文件(29行)、没有找到被路由处理的文件(32,33行),就会交给这个来处理。
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err); //由下面的2个app.use中的一个来处理(一般是第一个,除非第一个被注释)
});
//原注释说是会对错误进行加亮处理
//这部分和下面的区别在于,这部分会将错误信息暴露给用户,而下面的不会,因此注释掉这部分
//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', { //这里的error指调用views下的error模板
message: err.message,
error: {}
});
});
//这是我自行添加的,用于显示服务器启动的时间
console.log("Server start at :" + new Date());
//导出app,在./bin/www里会被调用
module.exports = app;
————————————分割线——————————
全文链接
http://blog.csdn.net/qq20004604/article/details/52019904
2016年08月02日 03点08分 1
1