注意:
node xx.js
。 还记得以前用Java的时候,Tomcat就是web容器,自己不需要写http相关的内容,而这个Node.js需要自己写。既然创建第一个应用,那么就从写http模块开始吧。
创建第一个应用,命名为app.js,输入http提示node-http-server
,就会出现如下代码,以标准模板来简单介绍下。
//引入http模块
var http = require('http');
//创建web服务
http.createServer(function (request, response) {
//设置响应头
response.writeHead(200, {
'Content-Type': 'text/plain'});
//在页面上输出一句话并结束响应
response.end('Hello World');
//表示监听的端口时8081
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');
大概了解http模块之后,那我们来手写一个吧,文件命名为http.js。
const http=require('http');
http.createServer((req,res)=>{
//输出请求的url
console.log(req.url);
//设置响应头
res.writeHead(200,{
"Content-type":"text/html;charset='utf-8'"});
//解决中文乱码
res.write("");
res.write("welcome to nayelya's blog
");
res.write('这是我的第一个nodejs程序!');
res.end();
}).listen(8080);
如果我们想要获取url中传过来的键值对,要如何获取呢?假设地址栏中的地址为http://127.0.0.1:8080/?name=nayelya&age=18
,我们可以看到控制台中打印了/?name=nayelya&age=18
,但实际上我们需要的是姓名nayelya和年龄18这两个值.那么如何获取呢?这就需要用到url模块了。
我们经常使用URL模块中的下列三个方法。
url.parse() //解析url
url.format() //url.parse()的逆向操作
url.resolve(from,to) //添加或替换地址
解决显示key-value问题时,需要用到url.parse(),下面展示一下如何使用.新建一个url.js。
const url=require('url');
var api='http://baidu.com?name=nayelya&age=18';
console.log(url.parse(api));
控制台打印信息如下,我们发现打印的东西还是和上一个demo中的path信息差不多,并非键值对的形式。
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'baidu.com',
port: null,
hostname: 'baidu.com',
hash: null,
search: '?name=nayelya&age=18',
query: 'name=nayelya&age=18',
pathname: '/',
path: '/?name=nayelya&age=18',
href: 'http://baidu.com/?name=nayelya&age=18'
}
那我们来小小的改造一下。url.parse(api,true)
,然后打印的信息就变成对象了,这样一来就方便获取某个key所对应的value了,再来操作一波。
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'baidu.com',
port: null,
hostname: 'baidu.com',
hash: null,
search: '?name=nayelya&age=18',
query: [Object: null prototype] {
name: 'nayelya', age: '18' },
pathname: '/',
path: '/?name=nayelya&age=18',
href: 'http://baidu.com/?name=nayelya&age=18'
}
接着我们通过tmp变量保存query中的内容,然后通过变量名.key的方式获取对应的value即可。
var tmp=url.parse(api,true).query;
console.log('姓名:'+tmp.name+' 年龄:'+tmp.age);
我们需要将请求的url中的键值对信息打印到控制台上,那么就以之前的http.js为例进行url模块整合.那么首先需要知道和请求相关的信息保存在哪儿,毫无疑问是存放在req中了,但是req信息这么多(可以自行打印req看看输出结果),其实只有req.url有用。
const http=require('http');
http.createServer((req,res)=>{
//输出请求的url
console.log(req.url);
//设置响应头
res.writeHead(200,{
"Content-type":"text/html;charset='utf-8'"});
//解决中文乱码
res.write("");
res.write("welcome to nayelya's blog
");
res.write('这是我的第一个nodejs程序!');
res.end();
}).listen(8080);
打印的url除了我们请求的地址之外,还有就是请求小图标的地址(显然是没有用的),所以我们可以判断一下,把无用的请求地址过滤掉,代码如下!
const http=require('http');
const url=require('url');
http.createServer((req,res)=>{
//设置响应头
res.writeHead(200,{
"Content-type":"text/html;charset='utf-8'"});
//解决中文乱码
res.write("");
res.write("welcome to nayelya's blog
");
res.write('这是我的第一个nodejs程序!');
//请求的url不是请求小图标时
if(req.url!='/favicon.ico'){
var userinfo=url.parse(req.url,true).query;
console.log('姓名:'+userinfo.name+' 年龄:'+userinfo.age);
}
res.end();
}).listen(8080);
upervisor会不同间时应用下面的所有文件,发现有文件被修改,就重新载入程序文件,这样修改了文件之后可以马上看到变更后的结果!
npm install-g supervisor
通过supervisor代替node命令启动程序。