今天我们就开发第一个 nodejs 项目,一个简单的 http server 服务器端程序
创建项目 DemoV1 的目录,并进入
mkdir DemoV1 cd DemoV1
通过 npm 初始化项目
[root@tongfunet DemoV1]# npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (demov1)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /data/docker.data/tfhome/SDPHP/Projects/NodeJS/DemoV1/package.json:
{
"name": "demov1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes)导入 http 模块
npm install http -g
建立 main 指定的脚本 index.js,写入下面的代码
const httpLib = require('http');
const urlLib = require('url');
const querystringLib = require('querystring');
const server = httpLib.createServer(function(req, res){
var requestData = '';
req.on('data', function(data){
requestData += data;
});
req.on('end', function(){
var $_SERVER = {}, p, tp, $_GET, $_POST, responseData, length;
// make $_SERVER, $_GET, $_POST
urlObj = urlLib.parse(req.url, true);
$_SERVER.REQUEST_METHOD = req.method;
$_SERVER.REQUEST_URI = req.url;
for(p in req.headers){
tp = p;
if(p == "host" || p == "user-agent"){
tp = "http-"+ p;
}
tp = tp.replace( /\-/g , "_");
$_SERVER[tp.toUpperCase()] = req.headers[p];
}
$_GET = urlObj.query;
$_POST = querystringLib.parse(requestData);
// dump
console.log($_SERVER);
// make response
responseData = "hello world !";
if($_SERVER.REQUEST_METHOD == "POST"){
if(requestData == ""){
responseData += " there is no post data.";
}
else{
responseData += " the post data is '"+ requestData+ "'.";
}
}
length = responseData.length;
// reponse
res.writeHead(200, {
"Content-Type":"text/html",
"Content-Length":length,
"Connection":"close"
});
res.write(responseData);
});
});
server.listen(8080);通过 node 启动服务器端
node index.js
通过 curl 测试
curl -d 'a=b&c=d' 'http://localhost:8080/path?a1=b1&c1=d1'
可以看到服务器端的输出内容
{
REQUEST_METHOD: 'POST',
REQUEST_URI: '/path?a1=b1&c1=d1',
HTTP_USER_AGENT: 'curl/7.29.0',
HTTP_HOST: 'localhost:6789',
ACCEPT: '*/*',
CONTENT_LENGTH: '7',
CONTENT_TYPE: 'application/x-www-form-urlencoded'
}打开 package.json,在 scripts 里面增加一行
"scripts": {
"test": "node index.js"
}通过 npm 启动服务器端
npm test
可以看到服务器端已经启动起来了
> demov1@1.0.0 test /tongfu.net/web/NodeJS/DemoV1 > node index.js