当前位置: 首页 > 后端技术 > Node.js

vue+node(express)做中间层开发3--express支持es6

时间:2023-04-04 00:01:53 Node.js

前面说到node层和拦截器也要用axios,结果发现express现在不支持es6了,原来的拦截代码是用es6风格写的,所以要考虑让express支持es6语法。修改目录结构切换到node-api目录,新建src文件夹。创建src/目录将bin/、app.js和routes/移动到src目录将bin目录下的www文件重命名为www.js将public/移动到项目根目录语法转换编辑server/node_api/src/bin/www.js,将header中的require指令注释掉,修改为import#!/usr/bin/envnode/***Moduledependencies。*/importappfrom'../app'importdebugLibfrom'debug'importhttpfrom'http'constdebug=debugLib('node-api:server')//varapp=require('../app');//vardebug=require('debug')('node-api:server');//varhttp=require('http');编辑server/node_api/src/routes/index.js,将require替换为import,将module.exports替换为export//varexpress=require('express')//varrouter=express.Router()importexpressfrom'express'varrouter=express.Router()/*获取主页。*/router.get('/',function(req,res,next){res.render('index',{title:'Express'})})//module.exports=routerexportdefaultrouterserver/node_api/src/routes/users.js这个文件本来是为路由设置的,但是我以后打算用axios。如果有重大更改,请先将其全部删除或注释掉。继续编辑server/node_api/src/app.js,同样使用import语法代替require,注意因为修改了目录结构,所以views和public的路径也要修改,例如app.set('views',path.join(__dirname,'../views'))从'express'导入快递从'path'导入路径从'cookie-parser'导入cookieParser从'morgan'导入记录器从'http-errors导入createError'从'导入indexRouter。/routes/index'//未引入usersRouterimportcorsfrom'cors'constapp=express()//varapp=express()//viewenginesetupapp.set('views',path.join(__dirname,'../views'))app.set('viewengine','jade')app.use(logger('dev'))app.use(express.json())app.use(express.urlencoded({extended:false}))app.use(cookieParser())app.use(express.static(path.join(__dirname,'../public')))app.use('/',indexRouter)//应用程序.use('/users',usersRouter)//注释掉//捕获404并转发到错误handlerapp.use(function(req,res,next){next(createError(404))})...//errorhandlerapp.use(function(err,req,res,next){//设置局部变量,只提供er开发中出错res.locals.message=err.messageres.locals.error=req.app.get('env')==='development'?err:{}//渲染错误页面res.status(err.status||500)res.render('error')})exportdefaultappscriptconfiguration先安装npm-run-all,运行时方便写一次多个脚本npminstallnpm-run-all--save-dev安装babel和其他包。Babel是一个Javascript编译器,主要用于将ECMAScript2015+版本的代码转换为向后兼容的JavaScript语法,使其可以在当前和旧版本的浏览器或其他环境(如Node.js)中运行。在项目根目录打开终端命令行,输入以下命令,我们将安装最新版本的babel(Babel7)。npminstall-D@babel/core@babel/cli@babel/preset-env@babel/node-D表示安装的包放在devDependency中--save表示安装的包放在node-api的依赖下根目录下创建.babelrc.js,写入如下代码{"presets":["@babel/preset-env"]}因为我们使用babel来转换不同类型的js语法,所以需要在.babel中配置preset-env预设。babelrc(之前安装),它告诉Babel要转换的类型。这些都设置好后,我们就可以测试节点服务器是否可以在ES6语法环境下运行了。首先在package.json中添加dev脚本:"scripts":{"server":"babel-node./src/bin/www","dev":"NODE_ENV=developmentnpmrunserver",},注意路径由./bin/www变为./src/bin/www,运行npmdev即可正常启动。生产准备prod脚本和dev脚本有一点区别,我们需要把src目录下的所有js文件代码都转换成nodejs可以识别的语法形式。运行prod脚本会生成一个类似于src/目录结构的dist/文件夹,但是每次运行脚本前,我们都需要删除旧的dist/文件夹,以确保我们运行的是最新生成的代码。以下是步骤:创建一个构建脚本,转换src/中文件的代码并生成一个新的dist/文件夹。安装rimraf包并创建一个干净的脚本来删除dist/文件夹。创建一个新的prod脚本并组合清理、构建和启动服务器脚本。我们首先需要安装rimraf包删除一个文件夹npminstallrimraf--save安装完成后,在package.json的scripts字段中添加一个clean脚本,我们在build脚本中会用到,现在整个scripts字段中的结构如下"scripts":{"server":"babel-node./src/bin/www","server:prod":"node./dist/bin/www","dev":"NODE_ENV=开发npmrunserver","clean":"rimrafdist","build":"babel./src--out-dirdist","start":"npmrunprod","prod":"NODE_ENV=productionnpm-run-allcleanbuildserver:prod"},配置nodemon添加一个watch脚本,通过配置文件,自动监控文件号然后重启服务器,比较优雅。安装nodemonnpmi-Dnodemon在node_api根目录添加一个nodemon.json配置文件{"exec":"npmrundev","watch":["src/*","public/*"],"ext":"js,html,css,json"}添加监视脚本"scripts":{"server":"babel-node./src/bin/www","server:prod":"node./dist/bin/www","dev":"NODE_ENV=developmentnpmrunserver","clean":"rimrafdist","build":"babel./src--out-dirdist","start":"npmrunprod","prod":"NODE_ENV=productionnpm-run-allcleanbuildserver:prod","watch":"nodemon"},原文在Node和Express中使用ES6(及以上)语法