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?

 
用户名: 密码:

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

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表示什么?

当前文件路径

36. 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

40. 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操作的一个对象模型库
   作用是连接后台服务器与数据库服务器,操作数据库
(增删改查)

51、安装mongoose指令?

cnpm install mongoose --save

52、mongoose连接数据库的代码?

   mongoose.connect(‘mongodb://127.0.0.1:27017/dbname’,function(err){
            If(!err){
console.log(‘数据库连接成功’)
} 
})

53、请简述mongoose中schema、model、entity概念?

Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

Model : 由 Schema 发布生成的集合模型,具有抽象属性和行为的数据库操作能力


Entity : 由 Model 创建的实体,他的操作也会影响数据库。
5、创建一个Schema,数据结构为user字符串类型,txt字符串类型,另添加时间戳?
var mongoose=require('mongoose');
var Schema=mongooe.Schema;
var myschema=new Schema({user:String,txt:String},{timestamps:true});
module.exports=mySchema;

54、创建model模型,集合名为User(model中所用到的schema路径为 …/schema/user.js)?

var mongoose=require('mongoose');
var mySchema=require('../schema/user');
var User=mongoose.model('User',mySchema);
module.exports=User;

55.若通过mongoose创建的集合模型为User,User集合添加一条文档{user:’tom’,txt:’hello world’},添加成功后重定向‘/’路径?,

User.create({user:’tom’,txt:’hello world’},function(err,data){
         If(!err){
            res.redirect(‘/’)
}
})

56、若通过mongoose创建的集合模型为User,请使用实体(entity.save())的方式向User集合中添加一条文档{user:’tom’,txt:’hello world’},添加成功后重定向‘/’路径?

var entity=new User({user:’tom’,txt:’hello world’});
entity.save(function(err,data){
         If(!err){
            res.redirect(‘/’)
}
})

57、若通过mongoose创建的集合模型为User,User查询所有文档,查询成功后渲染index文件,(res.render(‘index’,{list:data}) )?

 User.find({},function(err,data){   
      If(!err){

res.render(‘index’,{list:data})
}
})

58、若通过mongoose创建的集合模型为User,User集合删除{_id:12345}的集合,删除成功后重定向‘/’路径?

	User.remove({_id:12345},function(err,data){
         If(!err){
       res.redirect(‘/’);
}
})

59、若通过mongoose创建的集合模型为Student,Student集合删除{_id:12345}的集合,删除成功后向前端响应json数据为{code:1,msg:”删除成功”}?

Student.remove({_id:12345},function(err,data){
            If(!err){
res.json({code:1,msg:’删除成功’})
}
})

60、若通过mongoose创建的集合模型为Student,Student集合修改{_id:12345}的集合,把sex修改为’女’,修改成功后向前端响应json数据为{code:1,msg:”修改成功”}?

Student.update({_id:12345},{$set:{sex:’女’}},function(err,data){
        If(!err){
         res.json({code:1,msg:’修改成功’})_
}
})

61、Node提供的系统模块url,用那个方法可以将路径转化为对象方便使用?

  url.parse()
1、url模块的使用
   将请求地址解析成对象。
3、请使用http搭建一个最简单的服务器,直接写代码?
 var http=require(‘http’);
var server=http.createServer(function(req,res,next){
     //业务逻辑      })
server.listen(3000,function(err){if(!err){console.log(‘服务器运行在3000端口上’)}})

62、nodejs中的全局对象是谁?有全局对象window么?

个劳保   global     nodejs中没有window对象

63、如何给input绑定键盘事件?

Input.onkeydow(function(){})

64、未知宽高垂直水平居中?

 给父元素设置绝对定位,子元素相对定位,子元素left:50%;top:50%;    margen-left:-本身宽度一半;margen-top:-本身高度一半

65、请简述同步异步的区别?

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

66、请简述commonjs规范中模块导入和导出语法?

	模块导出: module.exports={}
  模块导入:   require(‘路径’)

67、使用模块的好处?

   封装模块,可以提高开发效率,提高代码复用率。

68、如果要全局安装express-generator使用的命令是?

cnpm  i  express  -generator

69、如何使用express创建一个项目?

express myname

70、如何启动express项目?

npm start

71、为什么npm start可以启动express项目?

在配置文件 package.json里 指定子bin 启动文件 可以启动

72、express项目中public目录的作用是?

静态资源文件 html css js img

73、Routes目录的作用是?

路由  包括前后台交互接口

74、views文件夹的作用是?

视图文件  前端模板页面

75、app.js文件的作用是?

主文件 入口文件

76、bin目录的作用是?

存放启动项目的脚本文件

77.express 创建项目 test,请写出指令?

Express –e test

78、下载mongoose中间件并写入dependecies,请写出指令?

Cnpm install mongoose --save

79、mongose连接数据库,已知数据库服务器地址为:127.0.0.1:27017/book,写出代码?

Mongoose.connect(“mongodb://127.0.0.1:27017/book”,function(err){
If(!err){
             Console.log(“数据库连接成功”)
}
})

80、写出mongoose中 schema的创建步骤,数据结构为 {user:String,pass:String},请写出代码

Var mongoose = require(“mongoose”);
Var Schema = mongoose,Schema;
Var myschema = new Schema({user:String,pass:String});
Module.exports = myschema

81、写出mongoose中model的创建过程?

Var  mongoose = require(“mongoose”);
Var myschema = require(“../schema/user.js”);
Var User = mongoose.model(“User”,myschema);
Module.exports = User;

82、User集合插入文档{a:100,b:’hello’},写出代码?

User.create({a:100,b:’hello’})

83、User集合删除name为‘张三’的所有文档,写出代码?

User.remove({name:“张三”})

84、User集合中,把{name:’张三’}的那个文档中age改为20,写出代码?

User.updateOne({name: “张三”},{$set:{age:20}})

85、User集合中,查找所有年龄大于20的文档,写出代码?

User.find({age:{$gt:20}})
10、User集合中,查找所有sex为’女’的文档,写出代码?
User.find({sex:“女”})


LocalStorage和sessionStorage是HTML5新增加的web机制 
1. Localstorage生命周期长必须手动才能清除
2.Sessionstorage的生命周期是从页面开启到页面关闭
3.内存方面:Localstorge和Sessionstorge是5M  cookie是5K
4.cookie的使用会占用过多的带
5. Session存储的位置 不在客户端而是服务器端
6. Session比cookie更安全隐秘

Web服务器可以用来解析我们的http请求 给我们做出相对应的响应与反馈

你可能感兴趣的:(前端面试题库,node.js)