nodejs(express的基本使用)

1.普通的http请求
//使用 HTTP 服务器和客户端
var http = require(‘http’)
//创建一个web服务器 并且返回server实例
var server = http.createServer()

//当服务器收到request事件的时候触发后面的回调函数
server.on(‘request’,function(request,response){
response.setHeader(“Access-Control-Allow-Origin”,"*");
console.log(“收到客户端的请求了”)
let arr = {
“name”: “zhangsan”,
“password”:“123456”
};
//返回的信息放在write()里
// response.write(JSON.stringify(array));
//或者通过end发送-----推荐
//结束这次请求,如果不结束客户端将接收不到信息
response.end(JSON.stringify(arr))
})

//绑定端口号,启动服务器
server.listen(3000,function(){

})

2.require方法
1.require(‘art-template’) //如果路径不加./ …/ 则它会去node_modules中寻找包名为art-template的文件 即第三方包的加载方式
2.require(’./a’) //加了./ …/ 这两种路径的请求时 他会去当前或者上一级中找文件,不会去node_module中寻找 即加载自己写的文件

3.两个js之间的调用
通过require加载模块
a.js

var b = require(’./b.js’)

console.log(b.add(100,200))

b.js

//第一种是导出多个成员
exports.add = function(x,y){
return x+y;
}
//第二种是导出单个成员
module.exports.b = function(x,y){
return x+y;
}
module.exports.add = function(x,y){
return x-y;
}
//两种方法在一个文件中可以同时出现,如果前后的成员不一样则会将两种方法的成员结合暴露出去
//如果后面一种中的成员和前面一种中的成员出现一样,则会出现后面暴露的方法中的成员覆盖前面暴露的方法的成员 比如上的的exports.add方法会被emodule.exports中的add方法覆盖

//但是如果是下面这种方法导出单个成员变量然后又有exports.a这种方式导出变量,那么通过exports导出的成员都将无效
module.exports = {
add:function(x,y){
return x+y
},
acc:function(x,y){
return x-y;
}
}
//关键在于最终暴露出去的方法是这样的 => return module.exports 如果对module.exports重新复制,那么exports所指向的对象就和module.exports所指向的对象不同
//比如下面这个例子

var moduleExports = {}; //这个相当于module.exports
var exports = moduleExports ; //这个相当于exports
//这个时候module.exports 与exports所指向的对象是同一个
//那么你对exports进行赋值的话moduleExports 中的值也会发生改变
exports.a = “foo”;
console.log(moduleExports.a); //此时输出的结果为foo
//这就相当于上面的module.exports.b exports.a 无轮你对谁赋值都能进行保存
//但是如果这个时候你对moduleExports 进行重新赋值
//此时moduleExports与exports 所指向的是不同的对象,所以你对exports赋值作用不到moduleExports上
moduleExports = {};
console.log(moduleExports.a);//这个时候就找不到这个a成员
//这就相当于上面的
//module.exports = function(){
// add:function(x,y){
// return x+y
// },
// acc:function(x,y){
// return x-y;
// }
//}

//然后又由于nodejs文件暴露的是module.exports 所以你在对module.exports 重新赋值后再去设置exports的成员变量在另一个文件夹是获得不到那些成员变量的

4.Express
1.安装

npm install express --save
1
2.hello world

const express = require(‘express’)
//express() —> http.createServer()
var server = express();

server.get(’/’,(req,res) => {
res.send(‘hello world’);
})
server.listen(‘3000’,function(){})

3.静态服务
将目录中的图片等静态资源暴露出来,可以直接通过url访问。如果不使用静态服务,则在url输入静态资源访问的时候是无法访问到里面的文件

const express = require(‘express’)
var server = express();
//express.static(’./public/’) 将当前路径下的public目录中的文件暴露出去
// /public/ url通过 /public/a.img 来访问里面的资源
// 前面的/public/可以随意 只要在url中加上你写的就可以
server.use(’/public/’,express.static(’./public/’))
// localhost:3000/public/a.img

//当没有第一个参数的的时候 url可以直接通过a.img来访问静态资源 不需要加上/public/
// server.use(express.static(’./public/’))
// localhost:3000/a.img

4.express中的art-template
安装
https://aui.github.io/art-template/express/

npm install --save art-template express-art-template

const express = require(‘express’)
//express() —> http.createServer()
var server = express();
//这里是加载模版引擎的句子,如果没有这一句下面的render函数就无法实现
server.engine(‘html’,require(‘express-art-template’));
app.set(‘views’,path.join(__dirname,’./views/’)) //这里可以手动修改art-template请求的文件,默认是views下的html模版
server
.get(’/’,(req,res) => {
//当使用render的时候,启动服务器后它会自动去根目录下面的views文件中查找,所以模版一定要放在views中
res.render(‘template.html’,{
name:“123”,
password:“123132132”
})
})
.get(’/main’,(req,res)=>{
res.send(‘我是/main请求的回应’);
})

server.listen(‘3000’,function(){
console.log(‘running…’)
})

5.post中参数的获取
在node中是无法直接获取到post中发送的数据的,这时候就要安装第三方插件body-parser 安装配置后在后端的request中就会多出一个属性body,body中封装着客户端发送过来的参数

npm i -S body-parser
1
const express = require(‘express’);
//引用body-parser
const bodyParser = require(‘body-parser’);

var server = express();

server.engine(‘html’,require(‘express-art-template’));
//处理application/x-www-form-urlencoded格式的请求体
//extended 当值为true的时候使用queryString方式(类似JSON.parse) 为false的话使用默认qs
//这里推荐为true
server.use(bodyParser.urlencoded({ extended: true }));

//处理application/json格式的请求体
server.use(bodyParser.json());

server.use(’/public’,express.static(’./public/’))

server
.get(’/’,(req,res)=>{
res.send(‘这里是/’)
})
.get(’/main’,(req,res)=>{
res.render(‘main.html’,{
title:‘这里是页面的标题’
});
})
.post(’/post’,(req,res)=>{
//body-parser配置完成后就可以通过req.body获得前端传递过来的参数
console.log(req.body)
let json = {
“name”:“lisi”,
“age”:“13”
};
res.send(JSON.stringify(json))
})

server.listen(‘3000’,function(){
console.log(‘runnning’)
})

6.路由
router.js

//所有的请求都单独抽取出来 不同的路由在不同的文件中编写
const express = require(‘express’)
//获得express中的Router
var router = express.Router();

//配置不同的请求响应
router.get(’/home’,(req,res)=>{
res.send(’/’);
})
//:id表示该url是动态的 根据不同的id来实现不同的数据获取
router.get(’/house/:id’,(req,res)=>{
//req.params.id 获取url中的id
res.send(req.params.id);
})

//将配置好的router暴露出去
module.exports = router;

http.js

const express = require(‘express’)
const app = express();

var router = require(’./router.js’)

//使用配置好的路由
//加上第一个参数后,对应路由中实现的请求地址为localhost:3000/main/路由中的请求地址
//不加第一个参数,对应路由中实现请求的地址为localhost:3000/路由中的请求地址
//根据实际需求可以对不同的请求路径使用不同的路由
app.use(’/main’,router)
//所有路由中没有配置的请求路径都将在下面这个中间件中进行操作
app.use((req,res)=>{
res.send(“404!!!”)
})

app.listen(‘3000’,function(){
console.log(’…running’)
});

5.连接mongodb数据库
1.安装mongodb
2.部分mongodb的cmd命令

mongo //启动mongo数据库
mongod //启动mongo服务
//下面的命令是敲完mongo后进入数据库后的操作
show dbs //查询所有的数据库
db //查看正在使用的数据库
use xxx //切换正在使用的数据库
show collections //查看数据库中的对象
db.xxx.find() //查看某个对象中的信息
eixt //退出数据库

3.npm安装

npm i mongoose

4.node中的使用

const mongoose = require(‘mongoose’)
mongoose.connect(“mongodb://localhost:27017/test”,{useNewUrlParser: true});
//在表中创建一个Cat 类型为String
const Cat = mongoose.model(‘Cat’, { name: String });

//实例化一个Cat
const kitty = new Cat({ name: ‘Zildjian’ });
//持久化保存kitty实例
kitty.save().then(() => console.log(‘meow’)).catch((e)=>console.log(e));

6.连接mysql数据库
1.npm安装第三方插件

npm i mysql

2.使用

var mysql = require(‘mysql’);

//创建数据库连接
var connection = mysql.createConnection({
host : ‘localhost’,
user : ‘root’,
password : ‘405994603’,
database : ‘nodesql’
});
//连接数据库
connection.connect();

//开始查询
connection.query(‘select * from user’, function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].name);
});

//结束连接
connection.end();

7.拓展
1.文件的上传
html页面部分

node接收部分

const express = require(‘express’)
const formidable = require(‘formidable’)
const path = require(‘path’)
const fs = require(‘fs’)
var router = express.Router();

router.get(’/’,(req,res)=>{
res.render(‘index.html’)
})

router.post(’/file’,(req,res)=>{
uploadFiles(req,function(oldPath,newPath){
fs.rename(oldPath,newPath,function(e){
if(e) throw e
})
})
res.json({
errMsg:‘上传成功’,
errCode: 1,
})
})

function uploadFiles(req,callback){
let formidables = new formidable.IncomingForm();
formidables.uploadDir = path.join(__dirname,’./public/img’)
formidables.parse(req,function(err,fields,files){
// console.log(files.file.path)
let oldPath = files.file.path;
let newPath = path.join(__dirname,’./public/img’,files.file.name);
callback(oldPath,newPath)
return;
})
}

module.exports = router

一些额外的东西
1.art-template —模版引擎
2.nodemon //这个插件可以帮助你当代码修改的时候不必重启服务器,它会自动重启

npm install --global nodemon

使用方法

第一次开启服务器的代码原本是
node wenjian.js
现在变成
nodemon wenjian.js

3.常用的npm命令

npm install --global npm npm升级
npm init 安装package.json文件
npm install 安装包名 --save 将安装的第三方包保存到package.json里
npm uninstall 包名 --save 删除包名
npm isntall --global cnpm 安装淘宝镜像
npm config set registry https://registry.npm.taobao.org 将npm的下载镜像换成淘宝镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值