nodejs与Express4配合搭建网站
来源:互联网 发布:传世登陆器源码 编辑:程序博客网 时间:2024/06/08 04:49
最近用nodejs和Express试了一下搭建网站,感觉速度还是相当快的,总结一下,好记性不如烂笔头!
node的安装可以直接到官网下载最新版本,安装就好。
node安装好后我们来依次安装,其中-g表示全局安装,好处是可以直接在命令行里输入。-v可以查看相应轮子的版本,不过express的查看版本命令要用-V。
npm install
npm uninstall
-express安装
因为用的是版本四,所以输入下方语句进行安装:
npm install -g express
-supervisor—-每次修改代码后会自动重启。懒程序员就指望这种省事省力的工具活着了:)
npm install -g supervisor
接下来就可以用Express创建项目了。
先进入自己想建立工程的目录下,然后输入下方命令
express -e nodejs-project
这里说下express的一些简单命令:
- -h, –help output usage information
- -V, –version output the version number
- -e, –ejs add ejs engine support (defaults -j –jade)
–hbs add handlebars engine support - -H, –hogan add hogan.js engine support -
就可以看到该目录下自动建立了相应的文件夹,但是这个时候还没有建立完成哦!需要继续输入:
npm install
它会根据配置文件package.json自动安装相应的包,并把它们放进node_modules文件夹下。
这个时候就可以启动服务了,在命令行下输入:
node ./bin/www/
或
supervisor ./bin/www/
然后在浏览器中打开就可以看到久违的hello了!
默认端口为3000。
接下来说一下内部代码:
Express4改变了目录结构
- bin目录:有一个www文件,而这个就是开始文件,这样就可以理解我们的启动语句了!
- node_modules: 存放项目的依赖库;
- package.json: 项目依赖配置及开发者信息,可以看文档了解详细信息;
- public: 静态文件如 css,js,img;
- routes: 路由文件(这是攻城重点);
- Views: 页面文件(Ejs或者jade的模板,默认是jade);
为了使express能够识别我已经习惯的html文档,这里我建立了基于Ejs模板的架构。这样将其中的app.set('view engine', 'ejs');
改为app.engine('.html', ejs.__express);app.set('view engine','html');
就可以了!
app.js中的代码:
// 创建项目实例var app = express();// 定义日志和输出级别app.use(logger('dev'));// 定义icon图标app.use(favicon(__dirname + '/public/favicon.ico'));// 定义日志和输出级别app.use(logger('dev'));// 定义数据解析器app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: false }));// 定义cookie解析器app.use(cookieParser());// 定义静态文件目录// view engine setup定义页面文件的位置 __dirname是node.js中的全局变量,表示取当前执行文件的路径app.set('views', path.join(__dirname, 'views/pages'));//express.static( )是处理静态请求的,设置了public文件,public下所有文件都会以静态资料文件形式返回(如样式、脚本、图片素材等文件)app.use(express.static(path.join(__dirname, 'bower_components')));// 加载路由控制var routes = require('./routes/index');//路由var users = require('./routes/users');//表示当用户使用/访问时,调用routes,即routes目录下的index.js文件,其中.js后缀省略,用/users访问时,调用routes目录下users.js文件app.use('/', routes);app.use('/users', users);// 404错误处理app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err);});// 开发环境,500错误处理和错误堆栈跟踪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 }); });}// 生产环境,500错误处理app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} });});
bin/www文件
#!/usr/bin/env node /** * 依赖加载 */var app = require('../app');var debug = require('debug')('nodejs-demo:server');var http = require('http');/** * 定义启动端口 */var port = normalizePort(process.env.PORT || '3000');app.set('port', port);/** * 创建HTTP服务器实例 */var server = http.createServer(app);/** * 启动网络服务监听端口 */server.listen(port);server.on('error', onError);server.on('listening', onListening);/** * 端口标准化函数 */function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { return val; } if (port >= 0) { return port; } return false;}/** * HTTP异常事件处理函数 */function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; }}/** * 事件绑定函数 */function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind);}
rotes/index.js中的代码:
/* GET home page. */// router.get表示通过get请求/时,响应后面的function处理,两个参数分别是request、response//res.render表示调用模版引擎解析名字index的模板,传并传入了title对象做为参数router.get('/', function(req, res, next) { res.render('index', { title: '首页' });});//解释:若get请求的url为当前路径,则交给路由index入口中的对应函数处理app.get('/', routes.index);
其中一些方法的解释:
- app.set(name, value)和app.get(name)就是你想的那样,set()为设置 name 的值设为 value,get()为获取设置项 name 的值
- nodejs与Express4配合搭建网站
- node配合Express4 创建项目
- nodejs express4.x 创建项目
- NodeJS 、Express4.x、Jade使用方法
- nodejs--express4.x session用法
- Nodejs Express4.x开发框架
- nodejs+express+mongodb搭建网站
- Express4环境搭建
- nodejs express3.x 与 express4.x 的router区别 与修改方法
- mac之os x系统下搭建nodejs+express4.x+mongodb+gruntjs整套前端工程
- nodejs框架express4.2 简单入门
- Nodejs开发框架Express4.2.0简单开始
- nodejs框架express4.2 简单入门
- nodejs + express4.x + mongodb创建项目
- nodejs + express4.x + mongodb 创建登陆
- ubuntu nodejs + express4.x 安装 测试
- Nodejs+Express4.x+mongodb简要介绍
- NodeJS 、Express4.x、Augular、Bootstrap项目创建
- 计划策略-30-按销售与库存订单以批量生产
- Xcode6 添加pch文件
- 【iOS开发之Objective-C】协议和代理
- 二叉树的操作(C language)
- 计划策略-40-最终装配计划
- nodejs与Express4配合搭建网站
- 小点滴——word自动目录+页码问题——摘自贴吧
- ipp sample cmake编译uic、application、picnic时需要Qt4(已安装Qt4.8.5)cmakelist.txt修改
- 计划策略-50-没有最终装配的计划
- 计划策略-52-没有最终装配和没有MTO的计划
- hdu 1285 确定比赛名次
- EnvironmentError:mysql config not found
- 玲珑杯Unity开发心得——开始菜单GUI制作
- 索引器