您的位置:首页 > Web前端 > Node.js

node个人博客第一天

2015-10-27 23:38 676 查看
很早之前就听过node很牛逼,但是一直没空尝试,直到暑假快结束时候结束手头ios的事情,想专心准备托福,没想到还是停不下来开始了node的尝试。虽然只是装了个环境。。还是乱七八糟的。。

首先配置node环境,一般是在官网下载包,然后安装。但因为我用的是fedora,清爽的命令行很快解决了问题。

sudo dnf install nodejs


然后再安装npm,node的模块库,非常强大,具体自己google查询吧~

sudo dnf install npm


fedora源里都有,然后。。就是这样一个清爽的大坑让我查到了前几天才弄清楚为什么我运行不了。。fedora源里虽然有nodejs和npm,但是版本太旧了,结果为后期用的那些express都不能用,害我不断切换姿势,怀疑人生。。

所以不管你从哪里弄来的node和npm都不用慌,接下来 和我一起慢动作

sudo npm install -g n


安装n模块包,-g代表global,名字这么短也是任性

sudo n stable


更新node到最新稳定版,这种感觉仿佛有回到fedora的dnf的清爽状态。。ubantu的apt-get似乎也差不多

sudo npm update -g npm


然后更新了npm到最新。。。

接下来
npm -v       node -v
查下版本号

接下来是安装express,目前node第二流行的框架吧(因为广告法,具体什么样的存在自己google

sudo npm install -g express
sudo npm install -g express-generator


废话说完,接下来我们就愉快的开始搭博客啦

命令行切到想要进行操作的位置,然后直接用express建个工程 -e代表使用ejs模板引擎,默认是jade

express -e lighter


然后我们就可以看到生成了一个名为lighter的项目,里面有node_modules(模块包的位置),public(公开资源),routes(路由系统),view(显而易见的视图目录),还有app.js就是路口,package.json包的目录信息以及项目信息。如果不用express建的话直接
npm install
在里面填写项目信息,然后在写包引用后输入
npm install
就自动下载包文件到node_modules,要删除的时候
npm uninstall (包的名字)
删除

在app.js里可以看到用
xx = require('包名字');
然后结束这种废话吧。。基础部分推荐朴灵的《深入浅出nodejs》

cd lighter && node ./www/bin


试运行lighter,然后,恩,换个姿势

sudo npm install -g supervisor


有了supervisor我们就可以开个特技

supervisor node ./www/bin


有了更多的的信息,然后每次边更改代码它会自动重启更新,反正是很厉害啦

它默认监听3000端口,我们可以打开浏览器,输入localhost:3000,出现由express模板自动生成的网页,内心一阵满足。。然而这一切还没开始呢。。。

我从别人那里掰一段app.js里各部分的解释,大家看看就好

(1) var app = express():生成一个express实例 app。

(2)app.set(‘views’, path.join(__dirname, ‘views’)):设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。

(3)app.set(‘view engine’, ‘ejs’):设置视图模板引擎为 ejs。

(4)app.use(favicon(__dirname + ‘/public/favicon.ico’)):设置/public/favicon.ico为favicon图标。

(5)app.use(logger(‘dev’)):加载日志中间件。

(6)app.use(bodyParser.json()):加载解析json的中间件。

(7)app.use(bodyParser.urlencoded({ extended: false })):加载解析urlencoded请求体的中间件。

(8)app.use(cookieParser()):加载解析cookie的中间件。

(9)app.use(express.static(path.join(__dirname, ‘public’))):设置public文件夹为存放静态文件的目录。

(10)app.use(‘/’, routes);和app.use(‘/users’, users):路由控制器。

(app.use(function(req, res, next) {

var err = new Error(‘Not Found’);

err.status = 404;

next(err);

});04错误,并转发到错误处理器。

(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

});

});

}境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。

(13)

app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});


生产环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。

(14)module.exports = app :导出app实例供其他模块调用。

bin/www文件大家也看看就好

(1)#!/usr/bin/env node:表明是 node 可执行文件。

(2)var debug = require(‘debug’)(‘blog’):引入debug模块,打印调试日志。

(3)var app = require(‘../app’):引入我们上面导出的app实例。

(4)app.set(‘port’, process.env.PORT || 3000):设置端口号。

(5)

var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});


然后再看看router路由系统,router其实就是一堆路由函数,放在router里,这样不至于app里臃肿,其实他们都放在app.js里也成。

var express = require(‘express’);

var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
module.exports = router;


生成一个路由实例用来捕获访问主页的GET请求,导出这个路由并在app.js中通过app.use(‘/’, routes); 加载。这样,当访问主页时,就会调用res.render(‘index’, { title: ‘Express’ });渲染views/index.ejs模版并显示到浏览器中。

然后在看看view,因为我们用的是ejs模板,具体还是自己去看官方API文档

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>


在渲染模板时我们传入了一个变量 title 值为 express 字符串,模板引擎会将所有 <%= title %> 替换为 express ,然后将渲染后生成的html显示到浏览器中

又是一堆废话。。现在开始严肃认真了。。

首先一个博客嘛,肯定要能登陆,注册,退出,发文,以及最重要的主页

所以先开始编写路由

module.exports = function(app) {
app.get('/', function (req, res) {
res.render('index', { title: '主页' });
});
app.get('/reg', function (req, res) {
res.render('reg', { title: '注册' });
});
app.post('/reg', function (req, res) {
});
app.get('/login', function (req, res) {
res.render('login', { title: '登录' });
});
app.post('/login', function (req, res) {
});
app.get('/post', function (req, res) {
res.render('post', { title: '发表' });
});
app.post('/post', function (req, res) {
});
app.get('/logout', function (req, res) {
});
};


先把他们挂在这里,具体以后再讨论。get/post方法后有两个参数,第一个是/后接参数,后一个是回调函数,函数里呢又有两个参数,request和response,顾名思义,请求和回应呗。

接下来我们在搭个数据库,因为发现nosql比较酷炫。。像传统关系型虽然没玩过但是就觉得低端了,我们这里使用mongodb,下次打算玩玩redis,阿。。又要偏题了

首先fedora源里的版本好像很垃圾的样子,我下了一次觉得很无奈。。好像很渣。。然后我反复尝试,最后放个找来的好东西,google到的都是坑人的垃圾。。fedora的那个3.0版本源早就烂了,然后这样做

sudo emacs /etc/yum.repos.d/mongodb-org


在里面这样写

[mongodb-org]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/7/mongodb-org/stable/x86_64
gpgcheck=0
enabled=1


这样就配置好了,不放心还可以
sudo dnf makeache


sudo dnf install mongodb-org


fedora是这么任性的,不放心还可以
mongod -v
,其他系统就自己慢慢玩吧。。

至于配置mongodb怎么启动关闭操作以及开机自启。。自己查吧吧吧。

接下来我们用mongoose模块来操作mongodb。

npm install mongoose


具体明天再说吧orz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nodejs