前端面试宝典八(node篇)

1、node有哪些特征,与其他服务器端对比

特征:单线程、事件驱动、非阻塞I/O
  node 无法直接渲染静态页面,提供静态服务
  node 没有根目录的概念
  node 必须通过路由程序指定文件才能渲染文件
  node 比其他服务端性能更好,速度更快
node 更新很快,可能会出现版本兼容

2、如何判断当前脚本运行在浏览器还是node环境中

通过判断 global 对象是否为 window ,如果不为window ,当前脚本没有运行在浏览器中

3、什么是错误优先的回调函数?

错误优先(Error-first)的回调函数(Error-First Callback)用于同时返回错误和数据。第一个参数返回错误,并且验证它是否出错;其他参数返回数据。

4、AMD CMD规范的区别

CommonJS和AMD都是JavaScript模块化规范

  CMD依赖就近,而AMD依赖前置

  CMD是延迟执行的,而AMD是提前执行的

  AMD的API默认是一个当多个用,CMD的API严格区分,推崇职责单一

5、node怎么跟MongoDB建立连接

  • 1)引入mongoose
  • 2)使用mongoose.connect()方法连接到MongoDB数据库
  • 3)监听连接是否成功
  • 4)然后通过node,书写接口,对数据库进行增删改查

6、请介绍一下require的模块加载机制

  • 1)先计算模块路径
  • 2)如果模块在缓存里面,取出缓存
  • 3)加载模块
  • 4)的输出模块的exports属性即可

7、node 和 前端项目怎么解决跨域的

app.use(async (ctx, next) => {
    //指定服务器端允许进行跨域资源访问的来源域。可以用通配符*表示允许任何域的JavaScript访问资源,但是在响应一个携带身份信息(Credential)的HTTP请求时,必需指定具体的域,不能用通配符
    ctx.set("Access-Control-Allow-Origin", "*");

    //可选。它的值是一个布尔值,表示是否允许客户端跨域请求时携带身份信息(Cookie或者HTTP认证信息)。默认情况下,Cookie不包括在CORS请求之中。当设置成允许请求携带cookie时,需要保证"Access-Control-Allow-Origin"是服务器有的域名,而不能是"*";如果没有设置这个值,浏览器会忽略此次响应。
    ctx.set("Access-Control-Allow-Credentials", true);

    //指定服务器允许进行跨域资源访问的请求方法列表,一般用在响应预检请求上
    ctx.set("Access-Control-Allow-Methods", "OPTIONS, GET, PUT, POST, DELETE");

    //必需。指定服务器允许进行跨域资源访问的请求头列表,一般用在响应预检请求上
    ctx.set("Access-Control-Allow-Headers", "x-requested-with, accept, origin, content-type");

    // ctx.set("X-Powered-By", ' 3.2.1');


    //告诉客户端返回数据的MIME的类型,这只是一个标识信息,并不是真正的数据文件的一部分
    ctx.set("Content-Type", "application/json;charset=utf-8");


    //如果不设置mode,直接设置content-type为application/json,则fetch会默认这是跨域模式(mode:'cors'),在跨域POST之前,客户端会先发一条OPTIONS请求来”探探路”,如果服务器允许,再继续POST数据。对于这种OPTIONS请求,需要在服务器配置允许接受OPTIONS请求,这样写就是直接允许了所有的OPTIONS请求,也可以按照需求来判断OPTIONS请求中更详细的信息
    if (ctx.request.method == "OPTIONS") {
        ctx.response.status = 200
    }

    await next();
});

 

 

通过判断 Global 对象是否为 window ,如果不为window ,当前脚本没有运行在浏览器中

posted @ 2022-03-18 09:18  木子末  阅读(73)  评论(0)    收藏  举报