Node.js

作者: 我不傻_cyy | 来源:发表于2019-11-19 10:02 被阅读0次

在服务端运行的javascript就叫做node.js。
已经有了tomcat这样基于java的服务器,那么node.js的优势在哪里?
1.node.js上的应用可以使用javascript开发,这边方便前端人员。
2.node.js上的I/O是非阻塞式的,比tomcat的阻塞式更有优势。

node.js入门:

接下来编写服务器代码:
在src下创建文件server.js

var http = require('http');         //引入http模块
var url = require('url');             //引入url模块,帮助解析     
var queryString = require('querystring');          //引入querystring库,帮助解析
function service(request,response){                       //准备处理请求和响应的service函数
    var arg = url.parse(request.url).query;             //获取返回的url对象的query属性值
    var params = queryString.parse(arg);             //将arg字符串反序列化成一个对象
    console.log("method - " + request.method);     //打印请求方法
    console.log("url - " + request.url);                    //打印请求url
    console.log("id - " + params.id);                       //获取请求id
    response.writeHead(200,{'Content-Type':'text/plain'});
    response.end("Hello Node.js");
}
var server = http.createServer(service);   //基于service来创建服务器
server.listen(8088);                                  //服务器监听8088端口

运行:
在命令行中运行如下命令:

e:
cd e:\project\nodejs\src
node server.js

这样就启动了服务端,并运行刚才的server.js代码了
然后浏览器中输入地址http://127.0.0.1:8088/进行测试
模块:
所谓模块,就是别人写好的js
例如前面例子中引入的http模块

var http = require('http')

在server.js同一目录下创建how2j.js,在how2j.js中定义两个函数,

function service(request,response) {
    response.writeHead(200,{'Content-Type':'text/plain'});
    response.end('hello Node.js');
}
function sayhello(){
    console.log('hello from how2j.js');
}
exports.hi = sayhello;
exports.service = service;
//需要通过exports指定如何去调用这两个函数,才能被外部调用。

server.js中:

var http = require('http');
var how2j = require("./how2j");  //引入how2j模块,./表示同级目录
how2j.hi();          //调用how2j中的sayhello()函数
var server = http.createServer(how2j.service);     //创建基于how2j.service()函数的服务。
server.listen(8088);

通过在浏览器中输入http://127.0.0.1:8088来进行测试。

路由:

例如:
业务逻辑模块:requestHandlers.js

function listCategory(){
    return "a lot of categorys";
}
function listProduct(){
    return "a lot of products";
}
exports.listCategory = listCategory;
exports.listProduct = listProduct;

路由模块:router.js

function route(handle,pathname){
    if(typeof handle[pathname] === 'function'){
        return handle[pathname]();
    }else{
        return pathname + ' is not defined';
    }
}
exports.route = route;

服务器模块:server.js

var http = require("http");
var url = require("url");

function start(route,handle){
    function onRequest(request,response) {
        var pathname = url.parse(request.url).pathname;
        var html = route(handle,pathname);
        response.writeHead(200,{"Content-Type":"text/plain"});
        response.write(html);
        response.end();
    }
    http.createServer(onRequest).listen(8088);
}
exports.start = start;

入口主模块:index.js

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/listCategory"] = requestHandlers.listCategory;
handle["/listProduct"] = requestHandlers.listProduct;
server.start(router.route,handle);

在命令行中输入node index.js启动服务器
在浏览器中输入http://127.0.0.1:8088/listProduct或者http://127.0.0.1:8088/listCategory
执行过程分析:
启动index,会调用server的start函数,并将router.js中的route函数和handle数组作为参数,在server的start函数中通过8088端口启动服务,用onRequest函数来处理业务,首先访问url的pathname属性,然后调用router.js中的route函数,并能将handle和pathname作为参数传递进去。在router.js中,通过pathname获取真正的业务函数,并将业务函数的返回值返回。
当访问地址是/listCategory的时候,真正调用的是requestHandlers.js中国的listCategory()函数,/listProduct同理。

文件操作:

例如:
在src下创建文件how2j.html,并在其中写入hello from how2j
写业务处理模块requestHandler.js

var fs = require("fs");  //引入文件模块
//读方法
function readFile(){
    var html = fs.readFileSync("how2j.html");  //readFileSync表示同步读
    return html;
}
//写方法
function writeFile(){
    fs.writeFile("how2java.html","hello from how2java");
    return "write successful";
}
exports.readFile = readFile;
exports.writeFile = writeFile;

主模块index.js中添加

handle["/readFile"] = requestHandlers.readFile;
handle["/writeFile"] = requestHandlers.writeFile;

重启后在浏览器中输入:
http://127.0.0.1:8088/readFile或者http://127.0.0.1:8088/writeFile

npm概念

npm是随同nodeJS一起安装的包管理工具。
使用npm可以下载别人发布的模块使用,也可以发布自己的模块。
npm命令用于从国外的服务器上下载别人做好的模块,会受到网速等的影响。所以我们可以使用cnpm,通过国内的服务器下载,c表示copy的意思。
安装cnpm:

npm install -g cnpm --registry=https://registry.npm.taobao.org
-g是-global的意思,即全局安装,而不是安装在当前目录下。

node.js数据库:

创建数据库:
create database node.js
创建表结构:
use node.js
CREATE TABLE category_(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30),
PRIMARY KEY (id),
)DEFAULT CHARSET=UTF8
准备数据:

use node.js
delete from category_;
insert into category_ values(null,"category1");
insert into category_ values(null,"category2");
insert into category_ values(null,"category3");

安装数据库模块:
npm install mysql --save

npm run是npm run -script的简写,也就是执行脚本的意思,执行的脚本配置在package.json中的scripts对象中。

相关文章

  • nodejs安装

    Node.js安装 目录 Node.js简单介绍 windows安装Node.js Linux安装Node.js ...

  • node.js基础

    什么是node.js Node.js特点 node.js优点和缺点

  • Nodejs.2

    参考内容:Node.js EventEmitter 四、Node.js EventEmitter Node.js所...

  • nodejs第一步

    Node.js 是什么?Node.js与JavaScript的区别是什么? Node.js的优点?Node.js的...

  • node 学习笔记.md

    Node.js第一天 1. 初识Node.js 1.1 Node.js是什么 Node.js® is a Java...

  • Node.js学习

    主线:Node.js是什么 --> Node.js的组成 --> Node.js的特点 --> Helloworl...

  • 使用AngularJS搭建前台框架

    Node.js部署: 下载安装包:从Node.js官网下载Node.js安装包。 安装Node.js:打开node...

  • Node.js模块

    Node.js 模块和 Node.js 包介绍。 一、Node.js模块 每一个Node.js都是一个Node.j...

  • 小鹅通视频下载mac 小鹅通课程下载教程

    前两天,Node.js官方发布了Node.js 15的正式版本,Node.js 15 将替代 Node.js 14...

  • node学习笔记

    node.js 介绍 node.js初识 node.js 平台是基于 Chrome V8 JavaScript 引...

网友评论

      本文标题:Node.js

      本文链接:https://www.haomeiwen.com/subject/cyhbictx.html