常用知识
- 创建 Web 服务器
//创建一个 Web 服务器
var http = require('http')
var server = http.createServer()
server.on(function (req,res) {
console.log('收到客户端的请求了,请求路径是:' + req.url)
if (req.url === '/'){
res.write('hello world')
res.end()
}else if (req.url === '/login'){
res.end('login page')
}
})
// 绑定端口号,启动服务器
server.listen(3000, function () {
console.log('App running at 3000...')
})
在这里就不说get、post请求。因为开发都是用框架的,没有框架写起来太麻烦了。下面就express框架来讲讲。
2. 利用express创建web服务器
首先下载express npm i express
然后加载express
var express = require('express')
var app = express()
var bodyParser = require('body-parser') //加载post请求要的中间件
//配置post请求要的中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.get('/',function(req,res){
console.log(req.query) //获取get请求提交的数据
//以下响应只能写一个,一个请求只能响应一次
res.send('hello world') //响应数据
res.status(200).json({name:value}) //响应数据
res.redirect('/login') //重定向
})
app.post('/',function(req,res){
//post 请求要使用到中间件bodyParser,要加载进来
console.log(req.body) //获取post请求提交的数据
})
express开放静态资源:
//第一个参数不写时,请求的url也就没有,是虚拟的路径
app.use('/public/',express.static(path.join(__dirname,'./public/')))
333
3. 文件读写
文件的有两个模块很重要分别是fs
path
这两个模块
文件的读出:
fs.readFile(path.join(__dirname,'test.txt'),'utf-8',function(err,data){
if (err) {
return console.log(err)
}
console.log(data) //如果没有utf-8那个参数的话,要打印data.toString()
})
文件的写入:
fs.writeFile(path.join(__dirname,'test.txt'),'hello world',function(err){
if (err) {
return console.log(err)
}
})
当然还有许多的操作文件的方法,详情请移步 API文档
__dirname //动态获取当前文档的绝对路径
__filename //动态获取当前文档的绝对路径包括文件名
path.parse('filepath')
//返回filepath的一路径对象 ,
//对象属性 dir:不包文件名扩展名的路径; base:文件名扩展名;name:文件名;ext:扩展名;root:/
444
4.一些常用到的第三方模块
express-session //session工具
//先下载 npm i express-session
//然后引包 var session = require('express-session')
//配置 app.use(session({secret: 'hello',resave: false,saveUninitialized: false}))
//使用 req.session
art-template //模板引擎
//先下载 npm i art-template express-art-template
//配置 app.engine('html', require('express-art-template'))
//配置app.set('views', path.join(__dirname, './views/')) //默认从views 目录获取
//使用 res.render('index.html')
connect-busboy //node接收文件
//先下载 npm i connect-busboy
//然后引包var busboy = require('connect-busboy')
//配置 app.use(busboy{})
//使用
req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
file.on('end', function () {
//数据库操作
})
});
req.pipe(req.busboy);
555
5.模块化开发`
app.js //入口文件 不处理路由 处理全局的配置、路由挂载
public //这个目录是用户资源 css、js、img
models //数据模型,也就是数据库的表 user.js、orders.js
views //页面文件 index.html 、login.html
routes //路由处理
static //静态资源文件
//---------------------------路由挂载------------------------
//处理路由文件routes/user.js
var router = express.Router()
router.get('/',function(){})
module.exports = router
//app.js
var user = require('./routes/user')
app.use(user)
666
6. MongoDB
var mongoose = require('mongoose') //利用第三方模块mongoose
mongoose.connect('mongodb://localhost/test',{ useNewUrlParser: true }) //test为数据库,没有会自动创建
var Schema = mongoose.Schema
var userSchema = new Schema({
email:{
type:String,
required:true
}
//填写相关数据
})
module.exports = mongoose.model('User',userSchema)