node面试题

node常见面试题库
1、检测系统中node版本号的指令是?

node -v

2、如何退出node执行环境(REPL环境)?

 ctrl+c c

3、node如何创建服务器,写出代码?

 var http=require(‘http’);
var server=http.createServer(function(req,res,next){
     //业务逻辑      })
server.listen(3000,function(err){if(!err){console.log(‘服务器运行在3000端口上’)}})

4、http.createServer(function(req,res){ // 获取请求 })在如上函数中如何获取前端请求地址?

  req.url

5、req,res分别代表什么?

 req:全称request请求对象
 res:全称 response响应对象

6.如何向客户端浏览器响应‘hello world’?

res.write(‘hello world’);
res.end()

7.浏览器请求 ‘/favicon.ico’表示什么?如何做出响应?
表示浏览器(客户端)请求页面图标

  if(req.url==’/favicon.ico’){
fs.readFile(‘图标地址’,function(err,data){
       res.write(data);
        res.end()
})
}

8、如何加载fs模块?

  var fs=require(“fs”);

9、fs模块如何异步读取一个文件(文件路径为:’./file.json’)?

fs.readFile(‘./file.json’,’utf-8’,function(err,data){  
   If(!err){
     // data即为读取内容
}
})

10、fs如何同步读取文件(文件的路径为:‘./file.json’)?

fs.readFileSync(‘’./file.json”,”utf-8”);

11、同步和异步的区别?各举一个Js中同步和异步的案例?

异步:在一件事情没有做完,可以接着做另外一件事  非阻塞
同步:一件事情没有做完,就不可以做下一件事    阻塞。
同步案例:for循环语句,alert() 等 
异步案例:定时器,ajax异步请求

12、fs如何异步写入文件,写入内容为‘abc’,写入文件路径为’./file.txt’?

fs.writeFile(‘./file.txt’,’abc’,function(err){   })

13、写出注册的form表单,提交地址为’/api/login’,提交方式为’get’,用户名字段为user,密码字段为pass?

 <form  action=”/api/login” method=’get’>

     用户名:<input type=’text’ name=”user”/>
    密码:<input type=’password’ user=”pass”>

      <button type=’submit’ >注册</button>
 </form>

14、querystring模块如何解析如下字符串,(‘user=tom&pass=123456’)?

 querystring.parse(‘user=tom?pass=123456’)

15、url模块如何解析请求地址req.url, 得到如下参数{pathanem:’/’,query:{user:xxx,pass:xxxx}} ?

url.parse(req.url,true)

16、node服务器如何设置跨域请求和中文乱码?

 res.writeHead(200, {
    'Content-Type': 'application/json;charset=utf-8',
    'Access-Control-Allow-Origin': '*'
  })

17、npm是什么?

   npm是包管理工具

18、npm如何下载 jquery?

npm install jquery@版本号   或者  npm install jquery

19、npm工具下载的包放在哪个文件夹里?

node_modules

20、npm如何创建package.json?

 npm init

21、cnpm 和npm的区别?我们下载插件一般用哪个?

  npm 下载资源服务器在国外,cnpm下载资源服务器为国内淘宝镜像 。 一般下载用cnpm

22 、commonjs规范,如何导出一个模块?

module.exports={}

23、commonjs规范,如何导入一个模块?

var module=require(‘模块名或路径’)

24、自己仿写url模块(能把’/api?user=tom&pass=12345’解析成对象{pathname:’/api’,query:{user:’tom’,pass:12345}}),遵循commenjs规范?

module.exports={
parse:function(str,foo){
var arr=str.split('?'); 
var pathname=arr[0]
if(foo){
var arr1=arr[1].split('&'); 
var query={};
for(var i=0;i<arr1.length;i++){
var arr2=arr1[i].split('='); 
query[arr2[0]]=arr2[1];
}
}else{
var query=arr[1];
}
return {pathanme:pathname,query:query}
}
}

25、npm包的发布流程?

1.npm login  登录
   username:用户名
   password:密码
   email:邮箱
2.npm publish  发布

26、node服务器如何接受post请求?

  var str=””
   req.on(‘data’,function(thunk){
           str+=thunk;
})
   req.on(‘end’,function(){
})

27.get与post区别?

历史	参数保留在浏览器历史中。	参数不会保存在浏览器历史中。
对数据长度的限制	是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。	无限制。
安全性	与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
在发送密码或其他敏感信息时绝不要使用 GET !	POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性	数据在 URL 中对所有人都是可见的。	数据不会显示在 URL 中。

1. get是从服务器上获取数据,post是向服务器传送数据。


2. GET请求把参数包含在URL中,将请求信息放在URL后面,POST请求通过request body传递参数,将请求信息放置在报文体中。


3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。


4. get安全性非常低,get设计成传输数据,一般都在地址栏里面可以看到,post安全性较高,post传递数据比较隐私,所以在地址栏看不到, 如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到。


5. GET请求能够被缓存,GET请求会保存在浏览器的浏览记录中,以GET请求的URL能够保存为浏览器书签,post请求不具有这些功能。


6. HTTP的底层是TCP/IP,GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。


7.GET产生一个TCP数据包,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);POST产生两个TCP数据包,对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据),并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

28、express搭建服务器完成案例(注意:视图文件的配置,视图文件引擎的配置,静态资源文件的配置)(录屏)?

一.首先创建app.js文件如下:
//加载express模块
var express=require("express"); 
// 创建app服务器 等同于 http.createServer()
var app=express();
//加载路由模块
var IndexRouter=require('./routes/index.js');
var RouterHome=require('./routes/home.js')
//导入path模块(处理路径的模块)
var path=require("path");
//加载ejs模板
var ejs=require("ejs");
//配置 视图文件位置
app.set("views",path.join(__dirname,"views"));
//配置 视图文件引擎
app.set('view engine','ejs')
//设置静态资源文件位置
app.use('/public',express.static(path.join(__dirname,'public')))
//指定ip或域名 (本地ip:127.0.0.1等同于本地域名localhost)
var ip='127.0.0.1';
//指定端口
var port=3000; 
//app服务器监听端口
app.listen(port,ip,function(){ //app服务器监听端口
console.log("服务器运行在http://"+ip+":"+port)
});
//配置 一级路由规则
app.use('/',IndexRouter)
app.use('/a',RouterA)
//404处理
function fn(req,res){ // app添加 get请求根路径的路由
// res.send("hello world");// 向前台输出
console.log(req.url)
res.write("404");
res.end()
}
二.安装依赖 express ,ejs
三.创建views(视图文件),public(静态资源文件),routes(路由文件)文件夹
四.routes下创建路由文件index.js,a.js
//加载express模块
var express = require('express');
//创建router对象
var router = express.Router();
//配置 二级路由
router.get('/', function(req, res, next) {
res.render('index')
});
//导出路由模块
module.exports = router;

29、ejs文件中如何声明变量a?

 <%  a=100  %>

30.ejs文件中如何使用输入变量a?

 <%=  a  %>

31.ejs文件中如何引用 外部ejs文件(比如:./head.ejs)?

 <%  include ./head.ejs  %>

32.如果ejs文件中有数据 list=[{name:’apple’,price:5,address:’烟台’},{name:”香蕉”,price:8,address:’海南’},… ],如何用表格将他们展示出来?

<% for(var a in list){ %> <% } %>
水果名	价格	产地
<%= list[a].name %>	<%= list[a].price %>	<%= list[a].address %>

33、要点:

1.path.parse() 解析地址
2.path.normalize()格式化路径 注意'..' 和 '.'
3.path.join() 连接路径
4.path.resolve()  转换为绝对路径

34._ _dirname表示什么?

当前文件所在目录

35._ _filename表示什么?

当前文件路径
  1. var str=‘c:\wamp\www\a.html’;
    var obj=path.parse(str);
    请写出obj.base,obj.ext,obj.dir,obj.name的值?
  obj.base==‘a.html’  
   obj.ext==’.html’
   obj.dir==’c:\\wamp\\www\\’
  obj.name==’a’

37.console.log(path.normalize(’/test/test1//abc/tab/…’));输出结果?

‘/test/test1/abc/’

5.console.log(path.join(‘/test’, ‘test1’, ‘home/api’, ‘tab’, ‘…’));输出结果?
‘/test/test1/home/api/’

38、全局安装express-generater 指令是?

cnpm install express-generator -g 
或者
npm install express-generator -g

39、express创建项目test指令?

express -e test
  1. express创建的项目中文件夹和文件有哪些?各自含义?
app.js 是主文件  
package.json 是配置文件  
bin启动文件    
public静态资源文件    
routes路由    
views是视图文件   
node_modules 项目依赖

41、命令行启动mongodb数据库服务器在27017端口上的指令是(数据库位置c:/data/db)?

  mongod --dbpath c:/data/db --port 27017 

42、命令行连接数据库数据库服务器的指令是(本地服务器,端口27017)?

mongo --port 27017 

43 、命令行查看数据库的指令?

show dbs

44、命令行查看当前数据库集合的指令?

 show collections

45、命令行向user集合添加文档{user:tom,pass:123456}的指令?

db.user.insert({user:’tom’,pass:123456});

46.命令行查询user集合中所有文档?

  db.user.find()

47、命令行查询user集合中age大于18且小于20的文档?

db.user.find({age:{$gt:18,$lt:20}})

48、命令行更新 user集合中name为‘李四’的文档,sex改为女,其他字段不变?

db.user.update({name:’李四’},{$set:{sex:’女’}})

49、命令行删除user集合中 age大于20且性别sex不为女的所有文档

  db.user.remove({$and:[{age:{$gt:20}},{sex:{$ne:’女’}}]})
   或
  db.user.remove({age:{$gt:20},sex:{$ne:’女’}})

50、请简述mongoose是什么及作用?

Mongoose是封装了MongoDB操作的一个对象模型库
   作用是连接后台服务器与数据库服务器,操作数据库
(增删改查)
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值