刚好要在公司的一个数据展示项目(Nodejs开发)开发点东西,顺便学习一下nodejs 的express框架。假定我们安装好了nodejs 的环境(Windows下).
npm install --g express
npm install -g express-generator
安装完成可以express -V(大写的) 查看express版本
express -e test
如果第一次使用,可能会初使化完成后,会看到
install dependencies: cd test & npm install,
这是提示一些依赖现在还没安装,先进入项目test目录,然后执行 npm install安装依赖模块。
安装完成后,如果没有别的错误,就执行
npm start
看看是否正常,如果没有报错,在浏览器里输入 localhost:3000.会显示Welcome to Express.
这样,初始完成。
b. express 初始化文件与文件夹的说明
项目创建成功之后,test 目录下
五个文件夹,
主文件:app.js
配置信息文件:package.json
bin是项目的启动文件,配置以什么方式启动项目,默认 npm start
public是项目的静态文件,放置js css img等文件
routes是项目的路由信息文件,控制地址路由
views是视图文件,放置模板文件ejs或jade等(其实就相当于html形式文件啦~)
node_modules 是npm install 时安装的一些依赖组件
package.json
{
"name": "test",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.12.0",
"cookie-parser": "~1.3.4",
"debug": "~2.1.1",
"ejs": "~2.3.1",
"express": "~4.12.2",
"morgan": "~1.5.1",
"serve-favicon": "~2.2.0"
}
}
app.js 这里只是初始形式,根据实际开发,可添加新的引用以及其他逻辑
模块还要继续导出给 bin文件夹下的www文件使用
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
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', {
message: err.message,
error: {}
});
});
module.exports = app;
其他相关知识:
1. require:
编写稍大一点的程序时一般都会将代码模块化。在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。
在编写每个模块时,都有require、exports、module三个预先定义好的变量可供使用。
require函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。
模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头),模块名中的.js扩展名可以省略。
例如:
var express = require("express");
var func1 = require("./func1");// 是与当前main.js同路径下的func1.js模块
var func2 = require("../nodejs/func2");// func2.js则位于与main.js父文件同路径下的
exports.func1 = function(){
console.log("This is func1");
};
/*或者这样
function func1(){
console.log("This is func1");
}
exports.func1 = func1;
*/