学习nodejs部分基础内容入门小结
来源:互联网 发布:js调用function函数 编辑:程序博客网 时间:2024/04/30 00:57
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm,是全球最大的开源库生态系统。
安装、简易教程:http://www.runoob.com/nodejs/nodejs-tutorial.html
官方文档:http://nodejs.cn/api/
一、nodejs大致功能模块
二、部分用法示例
1、简单重要的使用命令
使用淘宝 NPM 镜像
npm install -g cnpm –registry=https://registry.npm.taobao.org
安装模块
cnpm install [模块名]
运行js文件
node [js文件名]
2、示例:请求参数获取
//router.js
function route(pathname) { pathname = pathname.substring(1, pathname.length); console.log("About to route a request for " + pathname); //var strs = pathname.split('&'); //for (var i = 0; i < strs.length; i++) { // console.log(strs[i]); //} if (pathname == 'testFun') { console.log('filename: ' + __filename); console.log('dirname: '+__dirname); testFun(); }}function testFun() { //for (var i = 0; i < 100000; i++) { // console.log("testFun "+i); //} // 输出当前目录 console.log('当前目录: ' + process.cwd()); // 输出当前版本 console.log('当前版本: ' + process.version); // 输出内存使用情况 console.log(process.memoryUsage());}exports.route = route;
//server1.js
var http = require("http");var url = require("url");function start(route) { function onRequest(request, response) { var pathname = url.parse(request.url).pathname; if (pathname != '/favicon.ico') { console.log("Request for " + pathname + " received."); route(pathname); } response.writeHead(200, { "Content-Type": "text/plain" }); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888); console.log("Server has started.");}exports.start = start;
//index.js
var server = require("./server1");var router = require("./router");server.start(router.route);//启动service,传入router处理函数Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt;}function printHello() { console.warn("nodejs服务正常运行中! " + new Date().Format("yyyy-MM-dd hh:mm:ss"));}printHello();// 两秒后执行以上函数setInterval(printHello, 10000);
在代码这文件目录执行cmd命令:node index.js
打开浏览器,请求:http://localhost:8888/test/001
效果:
3、示例:express使用
//express_demo.js
//express_demo.js 文件/**使用淘宝 NPM 镜像npm install -g cnpm --registry=https://registry.npm.taobao.org *cnpm install body-parser --savecnpm install cookie-parser --savecnpm install multer --save */var express = require('express');var app = express();var bodyParser = require('body-parser');var cookieParser = require('cookie-parser')var fs = require("fs");var util = require('util');//// 创建 application/x-www-form-urlencoded 编码解析//var urlencodedParser = bodyParser.raw({ extended: false })app.use(cookieParser())app.use(express.static('Content'));app.use(bodyParser());// 主页输出 "Hello World"app.get('/', function (req, res) { console.log("主页 GET 请求"); console.log("Cookies: ", req.cookies); //res.send('Hello GET'); // 输出 JSON 格式 response = { first_name: req.query.first_name, last_name: req.query.last_name }; console.log(response); res.send(JSON.stringify(response));})// POST 请求app.post('/', function (req, res) { console.log("主页 POST 请求"); //res.send('Hello POST'); // 输出 JSON 格式 //请求json格式: {"first_name":"pkm","last_name":"test1"} 类型 application/json response = { first_name: req.body.first_name, last_name: req.body.last_name }; console.log("准备写入文件"); fs.writeFile('input.txt', util.inspect(req), function (err) { if (err) { return console.error(err); } console.log("数据写入成功!"); }); console.log(res); res.end(JSON.stringify(response));})var server = app.listen(8888, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})
cmd执行:node express_demo.js
在浏览器请求:http://localhost:8888/?first_name=a&last_name=b
浏览器显示:
命令行显示:
4、示例:RESTFul API使用
//users.json
{"user1":{"name": "mahesh","password" : "password1","profession" : "teacher","id": 1},"user2": {"name": "suresh","password" : "password2","profession" : "librarian","id": 2},"user3": {"name" : "ramesh","password" : "password3","profession": "clerk","id": 3}}
//service_REST.js
/**安装需要的模块cnpm install express --savecnpm install body-parser --savecnpm install cookie-parser --savecnpm install multer --save */var express = require('express');var app = express();var fs = require("fs");//添加的新用户数据var user = { "user4": { "name": "mohit", "password": "password4", "profession": "teacher", "id": 4 }}app.get('/listUsers', function (req, res) { fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) { console.log(data); res.end(data); });})app.get('/addUser', function (req, res) { // 读取已存在的数据 fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) { //console.log(data); var dataJson = JSON.parse(data.trim()); console.log(data.length); dataJson["user4"] = user["user4"]; console.log(dataJson); res.end(JSON.stringify(dataJson)); });})//http://localhost:8888/getUser/3app.get('/getUser/:id', function (req, res) { // 首先我们读取已存在的用户 fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) { data = JSON.parse(data.trim()); var user = data["user" + req.params.id] console.log(user); res.end(JSON.stringify(user)); });})//http://localhost:8888/deleteUser/3app.get('/deleteUser/:id', function (req, res) { // First read existing users. fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) { data = JSON.parse(data.trim()); delete data["user" + req.params.id]; console.log(data); res.end(JSON.stringify(data)); });})var server = app.listen(8888, function () { var host = server.address().address var port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port)})
cmd执行:node service_REST.js
浏览器访问:http://localhost:8888/listUsers
浏览器访问:http://localhost:8888/addUser
浏览器访问:http://localhost:8888/getUser/2
浏览器访问:http://localhost:8888/deleteUser/2
5、示例:Mysql操作
//mysql表初始化sql语句:
SET NAMES utf8;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for `websites`-- ----------------------------DROP TABLE IF EXISTS `websites`;CREATE TABLE `websites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称', `url` varchar(255) NOT NULL DEFAULT '', `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名', `country` char(10) NOT NULL DEFAULT '' COMMENT '国家', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ------------------------------ Records of `websites`-- ----------------------------BEGIN;INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), ('3', '菜鸟教程', 'http://www.runoob.com/', '4689', 'CN'), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');COMMIT;SET FOREIGN_KEY_CHECKS = 1;
//service_mysql.js
/**安装Mysql模块cnpm install mysql*/function GetConnection() { var mysql = require('mysql'); var connection = mysql.createConnection({ host: '192.168.9.117', user: 'root', password: 'ycf.com', database: 'ycf_stock' }); return connection;}function test2() { var connection = GetConnection(); connection.connect(); var sql = 'SELECT * FROM websites'; //查 connection.query(sql, function (err, result) { if (err) { console.log('[SELECT ERROR] - ', err.message); return; } console.log('--------------------------SELECT----------------------------'); console.log(result); console.log('------------------------------------------------------------\n\n'); }); connection.end();}//test2();function test3() { var connection = GetConnection(); connection.connect(); var addSql = 'INSERT INTO websites(name,url,alexa,country) VALUES(?,?,?,?)'; var addSqlParams = ['测试网站', 'http://www.test.com', '1222', 'CN']; //增 connection.query(addSql, addSqlParams, function (err, result) { if (err) { console.log('[INSERT ERROR] - ', err.message); return; } console.log('--------------------------INSERT----------------------------'); console.log('INSERT ID:',result.insertId); console.log('INSERT ID:', result); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();}//test3();function test4() { var connection = GetConnection(); connection.connect(); var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'; var modSqlParams = ['测试网站6', 'http://www.test6.com', 6]; //改 connection.query(modSql, modSqlParams, function (err, result) { if (err) { console.log('[UPDATE ERROR] - ', err.message); return; } console.log('--------------------------UPDATE----------------------------'); console.log('UPDATE affectedRows', result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();}//test4();function test5() { var connection = GetConnection(); connection.connect(); var delSql = 'DELETE FROM websites where id=?'; var delSqlParams = [6]; //删 connection.query(delSql, delSqlParams, function (err, result) { if (err) { console.log('[DELETE ERROR] - ', err.message); return; } console.log('--------------------------DELETE----------------------------'); console.log('DELETE affectedRows', result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();}//test5();
可分别去掉test2()~test5()的注释,调用mysql增删改查功能。
mysql最终数据显示:
三、学习小结
nodejs适合高并发,低负载,弱逻辑,适合dataAPI,响应比.Net,java快,但生产环境出问题可能不好查,要有自己的log系统或其他方案去做这个支持,不适合开发web前端应用、逻辑复杂的场景都不太适合
四、nodejs进程守护工具forever的使用
为什么在使用forever?因为nodejs是单进程应用,一旦有异常未处理好,整个进程退出,就无法正常工作了。forever就是守护进程不退出的。
命令行使用安装forever
npm install forever -g
//如果要在程序代码中使用forever,安装forever-monitor
npm install forever-monitor
详细使用方法:https://github.com/foreverjs/forever
设置日志环境变量:
set FOREVER_ROOT=F:\nodejs\log
用forever启动并守护nodejs服务
forever start –uid “nodeapp1” -l ./log.txt -a service_excatch.js
可加参数 -w 文件改动监听并自动重启(可以用,但不建议这么用,需要时手动 forever restartall 就行了)
显示所有运行的node app
forever list
停止所有运行的node App
forever stopall
停止其中一个node App
forever stop app.js
或 forever stop [id]
启动所有
forever restartall
- 学习nodejs部分基础内容入门小结
- NodeJS入门(1)-基础
- Dll小结-->基础部分
- 多线程基础部分小结
- Python 基础内容小结
- 我的NodeJs学习小结
- 3天学习完AngularJS基础内容小结
- 2. nodejs 基础学习
- nodeJS基础学习
- nodejs基础学习笔记
- NodeJS-基础入门(一)
- Oracle基础入门小结
- Struts2入门基础小结!
- nodejs入门必须知道的内容
- nodejs入门必须知道的内容
- NodeJS学习(一) NodeJS基础
- java复习-基础内容部分
- android入门基础总结(2) -----学习小结
- 求一个数的所有约数
- Java 程序员快速上手 Kotlin 11招
- sbt与maven简单对比
- python-opencv绿幕抠图
- 相对路径和绝对路径
- 学习nodejs部分基础内容入门小结
- acm之Dinner
- 使用react native制作的一款网络音乐播放器
- Hadoop2.6.0 mac 安装
- 两个数求不能组合成的最大数
- HTML5复习 (13)
- 使用栈存储后缀表达式
- 激光SLAM导航系列(三)Costmap(代价地图)(上)
- 设计模式——状态模式