基本知识
Node JS是单线程应用程序,但它通过事件和回调的概念,支持并发;
NodeJS的每一个API都是异步的,作为一个单独的线程,它使用异步函数调用来维护并发;
Node使用观察者模式;
Node线程保持一个事件循环,每当任何任务完成后得到结果,它触发通知事件侦听函数来执行相应的事件;
Node.js = 运行环境+ JavaScript库
npm 节点程序包管理器;
命令行实用程序安装包,作为Node.js版本管理和依赖包管理;
npm --version; B版本
npm ls/nmp ls -g;列表
npm install modulename; 本地模式安装某一个模块,
npm install modulename - g;全局模式安装某一个模块
npm uninstall modulename;卸载模块
var express = require('express');引用模块
npm update;当Package.json变化时进行更新
npm search modulename;搜索模块
npm init;初始化模块,生成package.json
package.json
是存在于任何Node应用程序/模块的根目录,并用于定义一个包的属性;
name - 包的名称
version - 包的版本
description - 包的描述
homepage - 包的网站主页
uthor - 包的作者
contributors - 包的贡献者的名称列表
dependencies - 依赖性列表。
npm自动安装所有在node_module文件夹中的包提到的依赖关系。
repository - 包的存储库类型和URL
main - 包的入口点
keywords - 关键字;
Express 概述
用于创建Node JS的Web应用程序非常流行的Web应用程序框架;
安装Express :npm install express -g 查看npm ls -g;
安装Express生成器:
express生成器用于使用express命令创建应用程序框架;
npm install express-generator -g
利用express初始化一个应用程序
express firstApplication
再该目录下安装所有依赖 npm install/npm i
项目搭建
开发环境准备
nodejs环境搭建:
官网下载:https://nodejs.org/en/download/,安装
node --version 或者node -v查看nodejs版本
node 检查是否安装成功
express环境搭建
使用npm install express -g 安装express
使用npm install express-generator -g安装Express生成器
通过nmp ls -g 查看express是否安装成功
构建简单项目
打开终端,创建一个目录 mkdir test_express
切换到新创建的目录 cd test_express
创建项目:执行命令 express firstApplication,此处的firstApplication为项目的名称;
切换到项目目录下 cd firstApplication;
执行npm install或者npm i命令安装相关依赖
执行node app.js或者node app来启动该项目;
项目结构
项目代码
app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var http = require('http');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('port', process.env.PORT || 8891);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
//create the server
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
module.exports = app;
index.js和users.js是服务器调用的接口
index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
users.js
var express = require('express');
var router = express.Router();
var users = require('../user.json');
//GET users listing
router.get('/', function(req, res) {
res.send({ title: 'Users',users:users });
});
//add a user
router.post('/addUser', function(req, res, next) {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function () {
var json = JSON.parse(body);
users["user"+json.id] = body;
res.send({ Message: 'User Added'});
});
});
//query by id
router.get('/:id', function(req, res, next) {
var user = users["user" + req.params.id]
if(user){
res.send({ title: 'User Profile', user:user});
}else{
res.send({ Message: 'User not present'});
}
});
module.exports = router;
views目录下创建users目录,然后在users目录下分别创建index.jade,new.jade和profile.jade
index.jade
h1 Users
p
a(href="/users/new/") Create new user
ul
- for (var username in users) {
li
a(href="/users/" + encodeURIComponent(username))= users[username].name
- };
new.jade
h1 New User
form(method="POST" action="/Users/addUser")
P
label(for="name") Name
input#name(name="name")
P
label(for="password") Password
input#name(name="password")
P
label(for="profession") Profession
input#name(name="profession")
P
input(type="submit", value="Create")
profile.jade
h1 Name: #{user.name}
h2 Profession: #{user.profession}
user.json:在项目根路径下创建user.json
{
"user1" : {
"name" : "test1",
"password" : "password1",
"profession" : "teacher",
"id": 1
},
"user2" : {
"name" : "test2",
"password" : "password2",
"profession" : "librarian",
"id": 2
},
"user3" : {
"name" : "test3",
"password" : "password3",
"profession" : "clerk",
"id": 3
}
}
利用postman测试
执行 node app.js启动项目,出现Express server listening on port 8891
http://localhost:8891/users/addUser
至此,一个很简单的基于nodejs的web项目就算是初始化好了!