百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

node之express模块,Web 应用程序框架

ccwgpt 2024-09-23 04:34 31 浏览 0 评论

一、简介

Express 是一个流行的 Node.js Web 应用程序框架,它简化了构建 Web 应用程序和 API 的过程。它提供了一组简单而灵活的功能,使开发者能够快速构建可靠的 Web 服务器。

以下是 Express 框架的一些主要特点:

  1. 路由:Express 提供了一种简单的方式来定义和处理不同 URL 路径的请求。通过定义路由,你可以将请求映射到特定的处理程序函数,以执行相应的操作。
  2. 中间件:Express 的中间件是一个非常强大的概念,它允许你在请求和响应之间执行功能。中间件可以用于处理身份验证、日志记录、错误处理等任务。Express 提供了一些内置的中间件,同时也允许你创建自定义的中间件。
  3. 模板引擎:Express 支持多种模板引擎,如 EJS、Pug(以前称为 Jade)、Handlebars 等。这些模板引擎使你能够轻松地生成动态的 HTML 页面。
  4. 错误处理:Express 提供了一种简单的方式来处理错误。你可以定义一个错误处理中间件,它会捕获应用程序中的错误并进行适当的处理,例如返回错误页面或发送错误响应。
  5. 静态文件服务:Express 允许你轻松地提供静态文件,如图像、CSS 和 JavaScript 文件。这对于构建具有前端界面的应用程序非常有用。
  6. 扩展性:Express 是一个非常灵活的框架,允许你根据项目的需求进行扩展。你可以使用其他库和中间件来增强 Express 的功能,使其适应不同的应用场景。

总体而言,Express 提供了一个简单而强大的框架来构建 Web 应用程序和 API。它的设计哲学是简洁、灵活和易于使用,使得开发者能够更快地构建出高效、可靠的 Node.js Web 服务器。

官网:https://expressjs.com/en/4x/api.html#req.body

二、安装

npm install express

三、express中间件

  1. express.json(optios): 用于解析请求的 JSON 数据。它会将请求的主体解析为 JSON 对象,并将其附加到 req.body 上
  • inflate:设置是否处理压缩的请求主体。当设置为 false 时,拒绝处理压缩的请求主体。
  • limit:控制请求主体的最大大小。如果是一个数字,表示以字节为单位的大小;如果是一个字符串,将使用 bytes 库解析该值。
  • reviver:reviver 选项会直接传递给 JSON.parse 作为第二个参数。你可以在 MDN 的 JSON.parse 文档中找到有关该参数的更多信息。
  • strict:设置是否仅接受数组和对象。当设置为 false 时,将接受 JSON.parse 可接受的任何类型。
  • type:用于确定中间件将解析的媒体类型。该选项可以是一个字符串、字符串数组或一个函数。如果不是函数,type 选项将直接传递给 type-is 库,可以是扩展名(如 json)、媒体类型(如 application/json)或带通配符的媒体类型(如 / 或 */json)。如果是一个函数,将调用 fn(req),如果返回一个真值,将解析请求。
  • verify:如果提供了该选项,将作为 verify(req, res, buf, encoding) 调用,其中 buf 是原始请求主体的 Buffer,encoding 是请求的编码方式。通过抛出错误,可以中止解析过程。
  1. express.raw(optios): 用于将请求的主体解析为原始的二进制数据。它会将原始数据附加到 req.body 上,可以在需要处理二进制数据的场景中使用。
  • inflate:设置是否处理压缩的请求主体。当设置为 false 时,拒绝处理压缩的请求主体。
  • limit:控制请求主体的最大大小。如果是一个数字,表示以字节为单位的大小;如果是一个字符串,将使用 bytes 库解析该值。
  • type:用于确定中间件将解析的媒体类型。该选项可以是一个字符串、字符串数组或一个函数。如果不是函数,type 选项将直接传递给 type-is 库,可以是扩展名(如 bin)、媒体类型(如 application/octet-stream)或带通配符的媒体类型(如 / 或 application/*)。如果是一个函数,将调用 fn(req),如果返回一个真值,将解析请求。
  • verify:如果提供了该选项,将作为 verify(req, res, buf, encoding) 调用,其中 buf 是原始请求主体的 Buffer,encoding 是请求的编码方式。通过抛出错误,可以中止解析过程。
  1. express.Router(optios): 创建可挂载的路由处理器的函数。它允许你将路由处理器模块化,并将其与主应用程序进行组合。可以创建多个路由器实例,每个实例都可以定义自己的路由和中间件。
  • caseSensitive:启用大小写敏感模式。默认情况下禁用,将 "/Foo" 和 "/foo" 视为相同。
  • mergeParams:保留来自父路由器(Router)的 req.params 值。如果父路由器和子路由器具有冲突的参数名称,子路由器的值将优先。
  • strict:启用严格匹配模式。默认情况下禁用,将 "/foo" 和 "/foo/" 视为相同。
  1. express.static(root,optios): 用于提供静态文件的中间件函数。它可以指定一个包含静态文件的目录,并将这些文件作为响应发送给客户端。这对于提供静态资源文件(如图像、CSS 和 JavaScript 文件)非常有用。
  • root:指定提供静态资源的根目录
  • options:配置项
    • dotfiles:确定如何处理点文件(以点“.”开头的文件或目录)。"ignore":忽略点文件。"allow":允许访问点文件。"deny":拒绝访问点文件。
    • etag:启用或禁用 ETag 生成。注意:express.static 始终发送弱 ETag。
    • extensions:设置文件扩展名的回退选项。如果找不到文件,将搜索具有指定扩展名的文件,并返回找到的第一个文件。例如:['html', 'htm']。
    • fallthrough:控制客户端错误的处理方式。true:允许客户端错误继续传递,不作为未处理的请求。false:将客户端错误转发为客户端错误响应。
    • immutable:启用或禁用 Cache-Control 响应头中的 immutable 指令。如果启用,还应指定 maxAge 选项以启用缓存。immutable 指令将阻止支持的客户端在 maxAge 期间进行条件请求,以检查文件是否已更改。
    • index:发送指定的目录索引文件。设置为 false 以禁用目录索引。
    • lastModified:将 Last-Modified 头设置为操作系统上文件的最后修改日期。
    • maxAge:以毫秒或以毫秒格式的字符串设置 Cache-Control 头的 max-age 属性。
    • redirect:当路径名为目录时,重定向到带有尾部“/”。
    • setHeaders:用于设置与文件一起发送的 HTTP 头的函数。
  1. express.text(optios): 用于解析请求的主体为纯文本。它将请求的主体解析为字符串,并将其附加到 req.body 上。
  • defaultCharset:如果请求的 Content-Type 头中未指定字符集,用于指定文本内容的默认字符集。默认为 "utf-8"。
  • inflate:启用或禁用处理被压缩的请求体(deflated)。当禁用时,将拒绝包含压缩请求体的请求。默认为 true。
  • limit:控制请求体的最大大小。如果是一个数字,则表示字节数;如果是一个字符串,则将其传递给字节库进行解析。例如:"100kb" 表示 100 KB。默认为 "100kb"。
  • type:用于确定中间件将解析的媒体类型。该选项可以是一个字符串、字符串数组或一个函数。如果不是函数,则 type 选项直接传递给 type-is 库,可以是扩展名(如 txt)、媒体类型(如 text/plain)或带通配符的媒体类型(如 / 或 text/*)。如果是一个函数,则会调用 type 选项作为 fn(req),如果返回一个真值,则解析请求。默认为 "text/plain"。
  • verify:如果提供了该选项,将作为 verify(req, res, buf, encoding) 调用,其中 buf 是原始请求体的 Buffer,encoding 是请求的编码。通过抛出错误可以中止解析过程。
  1. express.urlencoded(optios): 用于解析请求的主体为 URL 编码的数据。它将请求的主体解析为键值对的形式,并将其附加到 req.body 上。
  • extended:该选项允许选择在解析 URL 编码数据时使用 querystring 库(当值为 false)还是 qs 库(当值为 true)。"extended" 语法允许将丰富的对象和数组编码为 URL 编码格式,从而实现类似 JSON 的体验。请参考 qs 库了解更多信息。默认为 true。
  • inflate:启用或禁用处理被压缩的请求体(deflated)。当禁用时,将拒绝包含压缩请求体的请求。默认为 true。
  • limit:控制请求体的最大大小。如果是一个数字,则表示字节数;如果是一个字符串,则将其传递给字节库进行解析。例如:"100kb" 表示 100 KB。默认为 "100kb"。
  • parameterLimit:控制允许在 URL 编码数据中的参数的最大数量。如果请求包含超过此值的参数,将引发错误。默认为 1000。
  • type:用于确定中间件将解析的媒体类型。该选项可以是一个字符串、字符串数组或一个函数。如果不是函数,则 type 选项直接传递给 type-is 库,可以是扩展名(如 urlencoded)、媒体类型(如 application/x-www-form-urlencoded)或带通配符的媒体类型(如 */x-www-form-urlencoded)。如果是一个函数,则会调用 type 选项作为 fn(req),如果返回一个真值,则解析请求。默认为 "application/x-www-form-urlencoded"。
  • verify:如果提供了该选项,将作为 verify(req, res, buf, encoding) 调用,其中 buf 是原始请求体的 Buffer,encoding 是请求的编码。通过抛出错误可以中止解析过程。

四、创建程序对象

  1. app = express():创建express对象
  2. app.on(event, callback(parent)):事件监听器,用于在 Express 应用程序被挂载到其他应用程序或路由器时触发回调函数。
  • error:当应用程序发生错误时触发。app.on('error', callback) 来监听错误事件,并执行相应的错误处理逻辑。
  • listening:当应用程序开始监听指定端口时触发。app.on('listening', callback) 来监听监听事件,并在应用程序开始监听时执行相应的操作。
  • close:当应用程序停止监听端口时触发。app.on('close', callback) 来监听关闭事件,并在应用程序停止监听时执行相应的操作。
  • mount:当应用程序被挂载到其他应用程序或路由器时触发。app.on('mount', callback(parent)) 来监听挂载事件,并在应用程序被挂载时执行相应的操作。
  • request:当应用程序收到请求时触发。app.on('request', callback) 来监听请求事件,并在每次请求到达时执行相应的操作。
  • route:当应用程序的路由被匹配时触发。app.on('route', callback) 来监听路由事件,并在每次路由匹配时执行相应的操作。
  • router:当应用程序的路由器被创建时触发。app.on('router', callback) 来监听路由器事件,并在路由器创建时执行相应的操作。
  • upgrade:当客户端发起 WebSocket 升级请求时触发。app.on('upgrade', callback) 来监听升级事件,并执行相应的 WebSocket 处理逻辑。
  • view engine:当应用程序的视图引擎被设置时触发。app.on('view engine', callback) 来监听视图引擎事件,并在设置视图引擎时执行相应的操作。
  • connect:当客户端连接到服务器时触发。app.on('connect', callback) 来监听连接事件,并在客户端连接时执行相应的操作。
  • checkContinue:当客户端发送 "Expect: 100-continue" 请求头时触发。app.on('checkContinue', callback) 来监听 checkContinue 事件,并在收到该请求头时执行相应的操作。
  • clientError:当客户端连接发生错误时触发。app.on('clientError', callback) 来监听客户端错误事件,并执行相应的错误处理逻辑。
  1. app.locals:用于在应用程序的所有路由和中间件中共享变量。这些变量可以在视图中使用。
  2. app.mountpath:应用程序的挂载路径。如果应用程序是根应用程序,则该值为 '/'。
  3. app.all(path, callback [, callback ...]):为指定的路径上的所有 HTTP 方法注册中间件或路由处理程序,回调函数返回req、res、 next
  4. app.delete(path, callback [, callback ...]):为指定的路径注册一个处理 DELETE 请求的中间件或路由处理程序。
  5. app.disable(name):禁用指定的设置。
  6. app.disabled(name):检查指定的设置是否被禁用。
  7. app.enable(name):启用指定的设置。
  8. app.enabled(name):检查指定的设置是否被启用。
  9. app.engine(ext, callback):注册一个视图引擎回调函数来处理指定扩展名的模板文件。
  10. app.get(name):获取指定设置的值。
  11. app.get(path, callback [, callback ...]):为指定的路径注册一个处理 GET 请求的中间件或路由处理程序,回调函数中返回req、res对象
  12. app.METHOD(path, callback [, callback ...]):为指定的路径注册一个处理指定 HTTP 方法的中间件或路由处理程序
  13. app.param([name], callback):注册一个参数处理函数,用于处理指定名称的路由参数,回调函数返回req、res、 next、 id。
  14. app.path():返回应用程序的规范化的挂载路径模式。
  15. app.post(path, callback [, callback ...]):为指定的路径注册一个处理 POST 请求的中间件或路由处理程序,回调函数中返回req、res对象
  16. app.put(path, callback [, callback ...]):为指定的路径注册一个处理 PUT 请求的中间件或路由处理程序,回调函数中返回req、res对象
  17. app.render(view, [locals], callback):渲染指定的视图,并将结果作为回调函数的参数返回,回调函数返回err、html
  18. app.route(path):创建一个新的路由对象,并将其与指定的路径关联,返回app对象
  19. app.set(name, value):设置指定的设置的值。
  20. app.use([path,] callback [, callback...]):注册一个中间件函数或一组中间件函数,用于处理传入的请求。

五、request对象

  1. req.app:获取请求所属的 Express 应用程序对象。
  2. req.baseUrl:获取路由的基础 URL。
  3. req.body:获取请求的主体数据,通常用于处理 POST 请求的表单数据。
  4. req.cookies:获取请求中的 cookie。
  5. req.fresh:检查请求是否为 "新鲜",即是否与客户端的缓存匹配。
  6. req.hostname:获取请求的主机名。
  7. req.ip:获取请求的 IP 地址。
  8. req.ips:获取请求经过的代理服务器的 IP 地址列表。
  9. req.method:获取请求的 HTTP 方法。
  10. req.originalUrl:获取原始的请求 URL。
  11. req.params:获取请求的路由参数。
  12. req.path:获取请求的路径。
  13. req.protocol:获取请求的协议。
  14. req.query:获取请求的查询参数。
  15. req.route:获取当前匹配的路由。
  16. req.secure:检查请求是否通过 HTTPS 协议发送。
  17. req.signedCookies:获取已签名的 cookie。
  18. req.stale:检查请求是否为 "陈旧",即是否与客户端的缓存不匹配。
  19. req.subdomains:获取请求的子域名列表。
  20. req.xhr:检查请求是否由 XMLHttpRequest 发起。
  21. req.accepts(types):检查客户端是否接受给定的 MIME 类型或 MIME 类型数组。
  22. req.acceptsCharsets(charset [, ...]):检查客户端是否接受给定的字符集或字符集数组。
  23. req.acceptsEncodings(encoding [, ...]):检查客户端是否接受给定的编码或编码数组。
  24. req.acceptsLanguages(lang [, ...]):检查客户端是否接受给定的语言或语言数组。
  25. req.get(field):获取请求头中指定字段的值。
  26. req.is(type):检查请求的 Content-Type 是否与给定的 MIME 类型匹配。
  27. req.param(name [, defaultValue]):获取路由参数、查询参数或请求体参数中指定名称的值。
  28. req.range(size[, options]):解析请求中的范围头字段,返回一个表示范围的对象。

六、response对象

  1. res.app:获取响应所属的 Express 应用程序对象。
  2. res.headersSent:检查响应头是否已发送。
  3. res.locals:用于在中间件函数中传递数据的对象。它是一个可用于存储和传递请求范围数据的对象,可以在请求处理链中的各个中间件函数之间共享数据。
  4. res.append(field [, value]):向响应头中添加指定字段的值。
  5. res.attachment([filename]):将响应头中的 Content-Disposition 设置为 "attachment",可选地指定下载的文件名。
  6. res.cookie(name, value [, options]):设置响应的 cookie。options配置如下:
  • domain(字符串):cookie 的域名。默认为应用程序的域名。
  • encode(函数):用于对 cookie 值进行编码的同步函数。默认为 encodeURIComponent。
  • expires(日期):cookie 的过期日期,使用 GMT 时间。如果未指定或设置为 0,则创建一个会话 cookie。
  • httpOnly(布尔值):将 cookie 标记为仅可由 Web 服务器访问。
  • maxAge(数字):相对于当前时间的毫秒数,方便地设置 cookie 的过期时间。
  • path(字符串):cookie 的路径。默认为 "/"。
  • priority(字符串):Set-Cookie 属性中的 "Priority" 值。
  • secure(布尔值):将 cookie 标记为仅在 HTTPS 下使用。
  • signed(布尔值):指示是否对 cookie 进行签名。
  • sameSite(布尔值或字符串):Set-Cookie 属性中的 "SameSite" 值
  1. res.clearCookie(name [, options]):清除响应中指定的 cookie。options配置同res.cookie
  2. res.download(path [, filename] [, options] [, fn]):将文件作为附件下载。options配置如下:
  • maxAge:以毫秒或以 "ms" 格式的字符串设置 Cache-Control 头中的 max-age 属性。默认为 0。
  • root:相对于当前工作目录的根目录,用于指定文件的相对路径。从 Express 4.18+ 版本开始可用。
  • lastModified:将 Last-Modified 头设置为操作系统上文件的最后修改日期。设置为 false 可禁用该功能。从 Express 4.16+ 版本开始启用。
  • headers:包含要与文件一起发送的 HTTP 头的对象。Content-Disposition 头将被 filename 参数覆盖。
  • dotfiles:用于处理以点开头的文件(dotfiles)的选项。可能的值为 "allow"、"deny" 和 "ignore"。默认为 "ignore"。
  • acceptRanges:启用或禁用接受范围请求。默认为 true。
  • cacheControl:启用或禁用设置 Cache-Control 响应头。默认为 true。
  • immutable:启用或禁用 Cache-Control 响应头中的 immutable 指令。如果启用,还应指定 maxAge 选项以启用缓存。immutable 指令将阻止支持的客户端在 maxAge 选项的生命周期内进行条件请求,以检查文件是否已更改。
  1. res.sendFile(path [, options] [, fn]):以八进制流的形式发送文件。options配置同res.download
  2. res.end([data] [, encoding]):结束响应,可选择发送数据和指定编码。
  3. res.format(object):根据请求的 Accept 头选择性地发送不同的内容。
  4. res.get(field):获取指定响应头字段的值。
  5. res.json([body]):将 JSON 数据发送作为响应。
  6. res.jsonp([body]):将 JSONP 数据发送作为响应。
  7. res.links(links):设置响应头中的 Link 字段。
  8. res.location(path):设置响应的 Location 头。
  9. res.redirect([status,] path):重定向到指定的路径。
  10. res.render(view [, locals] [, callback]):渲染指定的视图模板并将其发送作为响应。
  11. res.send([body]):发送响应数据。
  12. res.sendStatus(statusCode):发送指定状态码的响应。
  13. res.set(field [, value]):设置响应头字段的值。
  14. res.status(code):设置响应的状态码。
  15. res.type(type):设置响应的 Content-Type 头。
  16. res.vary(field):向响应头中添加 Vary 字段。

七、路由对象:express.Router()

  1. router.all(path, [callback, ...], callback):注册一个中间件函数,该函数将在指定路径上的所有请求方法上执行。
  2. router.METHOD(path, [callback, ...], callback):注册一个中间件函数,该函数将在指定路径上的特定请求方法上执行。METHOD 是请求方法的名称,例如 get、post、put、delete 等。
  3. router.param(name, callback):注册一个参数处理函数,该函数将在路由处理链中的特定参数名称出现时执行。参数处理函数可用于在处理特定参数之前执行一些预处理逻辑。
  4. router.route(path):创建一个新的路由路径,可以在该路径上链式调用多个 HTTP 请求方法的处理函数。
  5. router.use([path], [function, ...], function):注册一个中间件函数,该函数将在指定路径上的所有请求方法上执行。可选的路径参数用于限制中间件函数的执行范围。

八、示例

const express = require('express');
const app = express();
const port = 3000;

// 定义根路由处理程序,开启服务后访问http://localhost:3000
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

// 开启服务后访问http://localhost:3000/about
app.get('/about', (req, res) => {
  res.send('About page');
});

//开启服务后访问http://localhost:3000/contact
app.get('/contact', (req, res) => {
  res.send('Contact page');
});

// 启动服务器
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

相关推荐

团队管理“布阵术”:3招让你的团队战斗力爆表!

为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...

知情人士回应字节大模型团队架构调整

【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...

豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍

强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...

创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)

创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...

消息称吴永辉入职后引发字节大模型团队架构大调整

2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...

31页组织效能提升模型,经营管理团队搭建框架与权责定位

分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...

异形柱结构(异形柱结构技术规程)

下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...

职场干货:金字塔原理(金字塔原理实战篇)

金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...

底部剪力法(底部剪力法的基本原理)

某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...

结构等效重力荷载代表值(等效重力荷载系数)

某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...

体系结构已成昭告后世善莫大焉(体系构架是什么意思)

实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...

框架柱抗震构造要求(框架柱抗震设计)

某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...

梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)

某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...

死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?

活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...

不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么

最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...

取消回复欢迎 发表评论: