Express server listening on port 3000
太棒了。打开浏览器,输入:3000,你应该能看到Express的一个欢迎页面了。
现在你已经运行起了你自己的Node JS WebServer,带有Express引擎和Ejs HTML模板引擎。不是很难啊,对吧?
第2部分 – 好了,我们来写“Hello, World!”吧
打开你常用的文本编辑器或者其它IDE,我个人喜欢用Sublime Text。打开你的nodetest1目录下的app.js,这个文件就是你的App的核心了。你应该会看到这样的内容:
复制代码 代码如下:
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
这个只是定义了一堆JavaScript变量并指向了一些包和依赖,node函数,和routes。Routes(路由)相当于MVC中Models和Controllers的集合,它负责转发请求并且也包含一些处理逻辑。Express已经为我们创建好了所有这些东西,我们现在先忽略user route,开始写最顶层的route(由routes\index.js控制)。
在上面的这个文件的最后写上:
复制代码 代码如下:
var app = express();
这一句至关重要。它实例化了Express并赋值给我们的app变量。接下来的内容都要使用这个变量来配置一堆Express的参数。继续输入:
复制代码 代码如下:
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
这里设置了端口,寻找views的目录,用什么模板引擎来处理这些views,和一些其它的东西。还要注意最后一行,它告诉Express把public/目录下的静态文件作为顶层目录的文件来托管。比如你的图片目录存放在c:\node\nodetest1\public\images\里,但是实际访问地址是:3000/images/。
注意:你需要把这一行
复制代码 代码如下:
app.use(express.bodyParser());
改成
复制代码 代码如下:
app.use(express.urlencoded());
这是为了忽略一些App运行过程中Node窗口里面的警告信息。主要是一些Express和它的插件未来可能的修改。如果你不做这个修改,程序运行时你会收到一堆某某函数即将过期的警告。
然后增加:
复制代码 代码如下:
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
这样在开发过程中你可以做一些错误检查。
继续增加:
复制代码 代码如下:
app.get('https://www.jb51.net/', routes.index);
app.get('/users', user.list);
这会告诉路由当一个URI请求到达时使用哪个Route来处理。注意user变量是在前面定义的,并被map到了/routes/user.js,我们会调用这个文件中定义的list函数。这里可以显示用户列表。
继续增加:
复制代码 代码如下:
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
最后,创建一个http server并且启动它。这样就差不多了。
(以上内容在新的express生成的模板里是完整的,不需要自己写进去)
现在,我们写点有用的。我们不会直接在我们的index页面里写“Hello World!”,我们借这个机会学习一下如何使用route路由,同时学习一下Ejs引擎是如何工作的。在上面的app.js文件的app.get()这一段的后面添加一行:
app.get('/helloworld', routes.helloworld);
如果这时候你在命令行窗口按ctrl+C结束app.js进程再重启,然后用浏览器访问:3000/helloworld,你会得到一个很激动人心的node错误和命令行窗口中的一堆崩溃提示。这是因为我们还没有修改路由去处理这个路径。来做这个吧。在你的编辑器里,进入routes目录,找到index.js,打开它。它看上去应该是这样的:
复制代码 代码如下:
/*
* GET home page.
*/