Node Express 框架使用细节

发布于 2025-02-17 05:04:32 字数 2979 浏览 7 评论 0

1. app.set(name,value) 、app.get(name)

app.set(name,value) 把名字为 name 的项的值设为 value,用于设置参数

app.get(name) 获取名为 name 的项的值

//设定端口
app.set('port', process.env.PORT || 3000);
//设定视图路径主要清楚__dirname 的意思就可以了,它是 node.js 中的全局变量,表示取当前执行文件的路径     
app.set('views', path.join(__dirname,  'views' ));   
//设定视图引擎模板,还可以设定其他模板
app.set('view engine',  'jade' );
if(app.get( 'env' ) ===  'development' ) {  
    app.use( function (err, req, res, next) { 
        res.status(err.status|| 500);       
        res.render( 'error' , {           
            message: err.message,  
            error: err        
        });   
    });
}

2. 使用 app.use([path], function) 和 express.static 公开指定目录

公开指定目录,可通过 /public/xx 的方式访问 public 目录中的所有资源

app.use('/public/',express.static('./public/'))
app.use('/static/',express.static('./static/'))
app.use('/static',express.static(path.join(__dirname, 'public')))
//下面代码表示当用户使用/访问时,调用 routes,即 routes 目录下的 index.js 文件,
//其中.js 后缀省略,用/users 访问时,调用 routes 目录下 users.js 文件
var  routes = require( './routes/index' );
var  users = require( './routes/users' );
app.use( '/' , routes);
app.use( '/users' , users);

3. 文件操作路径和模块路径

文件操作路径:

./data/a.txt //相对于当前目录
data/a.txt   //相对于当前目录
/data/a.txt  //绝对路径,当前文件模块所处的磁盘根目录

模块操作路径:

// 这里如果忽略了,则也是磁盘根目录
require('/data/foo.js');

//相对路径
require('./data/foo.js');

4. 使用模板引擎时 render 函数的使用

render 方法默认不可使用,但如果配置了模板引擎则可使用

// 第一个参数不能写路径,默认去项目的 views 目录查找该模板文件,Express 约定所有视图文件都放到 views 目录中
res.render('html 模板名',{模板数据});
res.render('404.html');
//修改默认的 views 目录
app.set('views', 'render 函数的默径');

5. 中间件使用细节

同一个请求所经过的中间件都是同一个请求对象和响应对象。

中间件本身就是一个方法,该方法接收三个参数:

  • request 请求参数
  • response 响应对象
  • next 下一个中间件

中间件类型

万能匹配(不关心任何请求路径和请方法)

app.use(function (req,res, next){
    ....
    next();
})

只是以 '/xxx' 开头的路由中间件

app.use('/a',function(req,res,next){
    ...
    next();
})

错误中间件

app.get('/', function(req, res, next){
    fs.readFile('./1.txt', function(err, data){
        if(err){
            // 当调用 next 的时候,若传递了参数,则直接往后找到带有 4 个参数的应用程
            // 序级别中间件。当发生错误的的时候,可以调用 next 传递错误对象,
            // 然后就会被全局错误处理中间件匹配到并处理之。
            next(err);
        }
    })
})

// 配置错误处理中间件
app.use(function (err, req, res, next){
    res.status(500).send(err.message);
})

app.listen(3000,()=>{
    console.log("running at port 3000.")
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

递刀给你

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文