1. 文件操作路径和模块标识路径问题
模块标识
var fs = require('fs')
// 咱们所使用的所有文件操作的 API 都是异步的
// 就像你的 ajax 请求一样
// 文件操作中的相对路径可以省略 ./
// fs.readFile('data/a.txt', function (err, data) {
// if (err) {
// return console.log('读取失败')
// }
// console.log(data.toString())
// })
// 在模块加载中,相对路径中的 ./ 不能省略
// Error: Cannot find module 'data/foo.js'
// require('data/foo.js')
// require('./data/foo.js')('hello')
// 在文件操作的相对路径中
// ./data/a.txt 相对于当前目录
// data/a.txt 相对于当前目录
// /data/a.txt 绝对路径,当前文件模块所处磁盘根目录
// c:/xx/xx... 绝对路径
// fs.readFile('./data/a.txt', function (err, data) {
// if (err) {
// console.log(err)
// return console.log('读取失败')
// }
// console.log(data.toString())
// })
// 这里如果忽略了 . 则也是磁盘根目录
require('/data/foo.js')
2. express 的helloworld
先npm init --yes 再 npm i -S express
var express = require('express')
// 1. 创建 app
var app = express()
// 当以 /public/ 开头的时候,去 ./public/ 目录中找找对应的资源
// 这种方式更容易辨识,推荐这种方式
// app.use('/public/', express.static('./public/'))
// 必须是 /a/puiblic目录中的资源具体路径
// app.use('/abc/d/', express.static('./public/'))
// 当省略第一个参数的时候,则可以通过 省略 /public 的方式来访问
// 这种方式的好处就是可以省略 /public/
app.use(express.static('./public/'))
//req 请求对象 res 响应对象
app.get('/', function (req, res) {
res.send('hello world')
})
app.listen(3000, function () {
console.log('express app is running ...')
})
3. nodemon命令行工具
nodemon需要进行独立安装 全局
npm install --global nodemon
安装后 使用
nodemon app.js 启动服务
改动代码后 ctrl+s 进行刷新
4. 静态文件路径
http://expressjs.com/en/starter/static-files.html
查看官网
express.static(root, [options])
// /public资源
app.use(express.static('public'))
// /file资源
app.use(express.static('files'))
// /public/xxx
app.use('/public', express.static('public'))
// /static/xxx
app.use('/static', express.static('public'))
app.use('/static', express.static(path.join(__dirname, 'public')))
5. 回调函数
// function fn(callback) {
// // var callback = function (data) { console.log(data) }
// // setTimeout(function () {
// // var data = 'hello'
// // return data
// // }, 1000)
// // var data = '默认数据'
// // setTimeout(function () {
// // data = 'hello'
// // }, 1000)
// // return data
// setTimeout(function () {
// var data = 'hello'
// callback(data)
// }, 1000)
// }
// // 调用 fn ,得到内部的 data
// // console.log(fn())
// // 如果需要获取一个函数中异步操作的结果,则必须通过回调函数来获取
// fn(function (data) {
// console.log(data)
// })
function fn(callback) {
// var callback = function (data) { console.log(data) }
setTimeout(function () {
var data = 'hello'
callback(data)
}, 1000)
}
// 如果需要获取一个函数中异步操作的结果,则必须通过回调函数来获取
fn(function (data) {
console.log(data)
})
// $.get('dsadsadsa?foo=bar', function (data) {
// })
// $.ajax({
// url: 'dsadsa',
// type: 'get',
// data: {
// foo: 'bar'
// },
// // 使用者只负责传递,封装者需要去调用
// success: function () {
// }
// })
// function ajax(options) {
// options.success(data)
// }