书接上文,贴一个完整的HTTP实现,草书,只是为了说明问题,测试一下,不能用来做项目。
依赖两个,前文已经说明。直接通过NodeHTTP实现Mongodb的增删改查
import * as http from 'http';
import * as mongodb from 'mongodb';
class NodeServer001 {
server:any;
port:number;
//Mongodb连接字串
url:string = 'mongodb://USERNAME:PASSWORD@HOST/DBNAME?authMechanism=SCRAM-SHA-1';
//构造函数,输入一个端口号用于监听。
constructor(inPort:number){
this.port = inPort;
}
//启动
run() {
this.server = http.createServer(this.requestHandler)
this.server.listen(this.port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${this.port}`);
})
}
//请求处理方式
requestHandler = (request, response) => {
console.log(request.url);
if(request.url == "/GetInfo"){
this.doResponse1(response);
}else if(request.url == '/SetInfo'){
this.doResponse3(response);
}else if(request.url == '/DropInfo'){
this.doResponse4(response);
}else if(request.url == '/'){
this.doResponse2(response);
}
}
//获取数据
//http://localhost:1070/GetInfo
doResponse1(response){
let mMongoClient = mongodb.MongoClient;
mMongoClient.connect(this.url, function(err, db) {
if(err)
{
console.log('Error:'+ err);
return
}
let col= db.collection('DemoInfo'); // 获得collection的句柄
// col.find().limit(20).toArray(function(err, result) {
col.find().skip(1000).limit(20).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return
}
var myJsonString = JSON.stringify(result);
console.log(myJsonString);
response.end(myJsonString)
//console.log(result);
});
db.close();
});
}
//根目录
//http://localhost:1070
doResponse2(response){
response.end('Hello Node.js Server DoResponse2!')
}
//追加数据
//http://localhost:1070/SetInfo
doResponse3(response){
let mMongoClient = mongodb.MongoClient;
mMongoClient.connect(this.url, function(err, db) {
if(err)
{
console.log('Error:'+ err);
return
}
let col= db.collection('DemoInfo'); // 获得collection的句柄
col.insertOne({"title":"MongoDBDemo","description":"JustForTest","likes":1000,"by":"Demo"});
col.find({"title":"MongoDBDemo"}).limit(20).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return
}
var myJsonString = JSON.stringify(result);
response.end(myJsonString)
});
db.close();
});
}
//删除目录
//http://localhost:1070/DropInfo
doResponse4(response){
let mMongoClient = mongodb.MongoClient;
mMongoClient.connect(this.url, function(err, db) {
if(err)
{
console.log('Error:'+ err);
return
}
let col= db.collection('DemoInfo'); // 获得collection的句柄
col.deleteMany({"title":"MongoDBDemo"});
col.find({"title":"MongoDBDemo"}).limit(20).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return
}
var myJsonString = JSON.stringify(result);
response.end(myJsonString)
});
db.close();
});
}
}
let mNodeServer001 = new NodeServer001(1070);
mNodeServer001.run();
tsc编译,然后Node XXX.js执行,看看
http://localhost:1070/
http://localhost:1070/GetInfo
http://localhost:1070/SetInfo
http://localhost:1070/DropInfo
这些是不是能够在浏览器中正常运行…..
当然,这个只是一个简单的服务端例子,比如没有Root目录,访问静态资源该如何处理,Cookie等等也不支持。了解NodeJS的知道有个Express轻量级服务器,真实的运用一般应该使用Express,但是Express的TypeScript框架有很多。。。为了方便说明。我这里面只用了这个最最最简单的Http。对于测试用的写死的服务端API,勉强够吧。。。窃以为
关于Mongodb不在本片的范围内,如果要了解可以参看他们的在线手册,我也不熟,很简单,用到再去查也可。
// https://docs.mongodb.com/v3.0/reference/method/db.collection.find/