开发环境
去官网 https://nodejs.org/en/download/ 载windows系统的安装包,直接安装就行了,内置npm,自动配置环境变量
使用VS Code作为开发工具
使用VS Code打开项目文件夹,选择 调试-添加配置 添加nodejs的运行配置
配置如下
{
"version": "0.2.0",
"configurations": [
{
"name": "Run app.js",
"type": "node",
"request": "launch",
// 主文件
"program": "${workspaceFolder}/app.js"
}
]
}
在app.js内写入 console.log('Hello World')
Ctrl+F5 非调试启动
控制台输出如下,表示一切运行ok
node app.js
Hello World
其实在控制台直接node app.js
效果是一样的
模块
模块的名字就是文件名(去掉.js后缀)
模块之间是隔离的,它们内部各自使用的变量名和函数名都互不冲突
通过exports把模块的功能暴露出去,供外部调用
module.exports = func/obj/var;
或者
exports.hello = hello;
exports.greet = greet;
//等价于
exports = {}
exports.hello = hello;
exports.greet = greet;
module.exports = exports
在别的模块中通过require来引用别的模块类似于Java的import
Node会依次在内置模块、全局模块和当前模块下查找
这样就可以使用别的模块中exports的功能
// 不要忘了写相对目录,后面不需要要加.js
var stringUtils = require('./string-utils');
基本模块
-
var fs = require('fs')
文件系统模块,负责读写文件,同时提供了异步和同步的方法
-
var http = require('http')
http模块,用于创建一个http server
-
var url = require('url')
url参数解析的工具
-
var path = require('path')
路径转换,解析的工具
-
const crypto = require('crypto')
常见加密算法的封装
-
…
Demo:基于http模块的网络请求
var http = require('http');
http.get("http://baidu.com", function (req, res) {
var html = '';
req.on('data', function (data) {
html += data;
});
req.on('end', function () {
console.info(html);
});
});
安装模块
NodeJs 使用npm作为包管理器
如果项目目录下有package.json,使用npm install
命令会自动安装文件中指定的的模块,同时自动安装依赖的模块,所安装的模块会放在项目目录/node_modules
里面
#安装到项目里面
npm install module-name
#安装到全局
npm install module-name -g
Demo: mysql 模块的使用
npm install mysql
不要全局安装,不然无法找到mysql模块
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: '3306',
database: 'food',
});
var sql = 'SELECT * FROM myfile';
connection.query(sql,function (err, result) {
if(err){
console.log('[SELECT ERROR] - ',err.message);
return;
}
for(var i=0;i<result.length;i++){
console.log(result[i].name);
}
});
自定义模块
Demo: 对http模块中的server进行封装
app.js
var http = require('./myserver');
http.config({
'index': ['index.html'],
'port': 8888,
'root': 'public'
}).start();
myserver.js
var fs = require('fs');
var url = require('url');
var http = require('http');
var path = require('path');
//默认配置
var config = {
'port': 6666,
'index': ['index.html', 'default.html'],
'root': 'public'
};
var server;
var api = {
config: function (conf) {
for (var key in conf) {
if (conf.hasOwnProperty(key)) {
config[key] = conf[key];
}
}
server = http.createServer(function (request, response) {
requestUrl = url.parse(request.url);
var rootPath = path.join(path.resolve('.'), config.root);
var pathName = requestUrl.pathname;
function render(path) {
response.writeHead(200);
fs.createReadStream(path).pipe(response);
}
function render404() {
response.writeHead(404);
response.end('404 Not Found');
}
if (pathName[pathName.length - 1] === '/') {
for (var i = 0; i < config.index.length; i++) {
if (fs.existsSync(rootPath + pathName + config.index[i])) {
render(rootPath + pathName + config.index[i]);
return;
}
}
render404();
} else {
if (fs.existsSync(rootPath + pathName)) {
render(rootPath + pathName);
} else {
render404();
}
}
var basePath = path.join(path.resolve('.'), config.root);
});
return this;
},
start: function () {
server.listen(config.port);
console.info('Server start at ' + config.port);
}
};
module.exports = api;