• express-generator快速构建node后端项目


    express-generator是express官方团队开发者准备的一个快速生成工具,可以非常快速的生成一个基于express开发的框架基础应用。

    npm安装

    npm install express-generator -g
    

    初始化应用

    1. express my_node_test
    2. 创建了一个名为 my_node_test 的express骨架项目
    通过 Express 应用生成器创建的应用一般都有如下目录结构:
    1. .
    2. ├── app.js
    3. ├── bin
    4. │ └── www
    5. ├── package.json
    6. ├── public
    7. │ ├── images
    8. │ ├── javascripts
    9. │ └── stylesheets
    10. │ └── style.css
    11. ├── routes
    12. │ ├── index.js
    13. │ └── users.js
    14. └── views
    15. ├── error.jade
    16. ├── index.jade
    17. └── layout.jade

    个文件含义及用途
    1. app.js 是项目的主文件(入口文件),相当于vue项目的main.js
    2. bin: 启动目录 里面包含了一个启动文件
    3. bin/www 一个启动文件,配置了项目运行的端口信息 默认监听端口是 3000
    4. package.json 包描述文件 最重要的是 依赖的模板列表 dependencies
    5. 依赖列表里面的所有模板 可以通过 npm i / cnpm i 一次性全部安装
    6. public: 所有的前端静态资源 html css image js
    7. views: 主要放置后端模板文件
    8. routes: 放的是 路由 文件 (默认有两个),主要在这个目录下开发接口
    9. 路由主要定义 url 和 资源 的映射关系 ( 一一对应关系 )
    10. 主要用来接收前端发送的请求 响应数据给前端
    11. dataBase:是我自己新增的一个文件,主要用来配置数据库账号密码和端口以及连接mysql
    安装依赖
    1. cd my_node_test
    2. npm installcnpm inpm i

    启动项目

    1. SET DEBUG=myapp:* & npm start
    2. 或者 npm start (非debug模式启动)
    3. 运行成功,控制台输出服务运行端口 3000
    4. myapp:server Listening on port 3000 +0ms
    5. 通过浏览器访问 :http://localhost:3000

    接口的开发与引用
    1. 在项目的routes目录下写接口,app.js中引用
    2. routes/index.js
    3. var express = require('express');
    4. var router = express.Router();
    5. //引入数据库连接
    6. var db = require('../dataBase/db')
    7. router.get('/', function (req, res, next) {
    8. res.render('index', { title: 'Express' });
    9. });
    10. router.get('/users', function (req, res, next) {
    11. res.send('respond with a resource');
    12. });
    13. // 完整接口路径,下面可以看到结果 http://localhost:3000/demo
    14. router.get('/demo', function (req, res, next) {
    15. db.query("select * from t_user",
    16. function (err, result) {
    17. if (err) {
    18. console.log('查询错误', err);
    19. } else {
    20. res.send({
    21. code: 200,
    22. data: result
    23. });
    24. }
    25. }
    26. )
    27. });
    28. module.exports = router;

    数据库配置和连接

    1. config.js
    2. module.exports = {
    3. db: {
    4. host: "127.0.0.1",//如果是操作本地数据库,填写127.0.0.1;如果是远程服务器上的数据库填服务公网ip
    5. user: "root",//通常为root
    6. password: "xxxxx",//密码
    7. database: "node_test"//你所要操作的数据库的名称(是你在mysql中建立的数据库)
    8. }
    9. }
    1. db.js
    2. const mysql = require('mysql')
    3. const config = require('./config').db
    4. //连接数据库
    5. module.exports = mysql.createConnection(config)
    1. app.js
    2. var createError = require('http-errors');
    3. var express = require('express');
    4. var path = require('path');
    5. var cookieParser = require('cookie-parser');
    6. var logger = require('morgan');
    7. //一定要在路由之前,配置cors这个中间件,从而解决接口跨域的问题
    8. var cors = require('cors')
    9. // 导入路由模块 -- 接口
    10. var indexRouter = require('./routes/index');
    11. var app = express();
    12. app.set('views', path.join(__dirname, 'views')); // 模板引擎的配置
    13. app.set('view engine', 'jade'); // 模板引擎的配置 新版引擎从jade换成了pug,貌似是因为jade商标被注册了
    14. app.use(cors()) // 中间件,解决跨域问题
    15. app.use(logger('dev')); // 将信息打印到控制台
    16. app.use(express.json()); // 内置的中间件,将解析的数据放到req.body中
    17. app.use(express.urlencoded({ extended: false }));// req.body,因为我们采用了application/x-www-form-urlencoded的数据格式,
    18. // 故我们需要采用对应解析的中间件,express为我们内置了一个express.urlencoded({extended: false})
    19. // 如果设置为false,那么对URL-encoded的数据的解析采用querystring库
    20. // 如果设置为true,那么采用qs库,允许将富对象和数组编码为url编码格式,允许使用url编码的json体验
    21. app.use(cookieParser()); // 中间件,处理每一个cookie,可以获取并设置cookie 获取方式 req.cookie.xxx
    22. app.use(express.static(path.join(__dirname, 'public'))); // 访问静态文件
    23. // 注册路由 --接口
    24. app.use(indexRouter);
    25. // catch 404 and forward to error handler
    26. app.use(function (req, res, next) {
    27. next(createError(404));
    28. });
    29. // error handler
    30. app.use(function (err, req, res, next) {
    31. res.locals.message = err.message;
    32. res.locals.error = req.app.get('env') === 'development' ? err : {};
    33. res.status(err.status || 500);
    34. res.render('error');
    35. });
    36. module.exports = app;

    查看demo接口效果,表中4条数据全部拿到,正常

    最后推荐安装nodemon插件,因为每次更改后都需要重启服务才生效,太麻烦

    $ npm i -g nodemon

    安装成功后记得修改package.json的配置

  • 相关阅读:
    Unity之ShaderGraph如何实现冰冻效果
    Docker之MySQL_GROUP_REPLICATION组复制(MGR)
    Jmeter redis连接测试
    鸡得葡萄球菌病的危害 鸡什么药防治鸡球菌病
    如何通过执行SQL为低代码项目提速?
    一文搞懂序列化
    从0开始刷力扣
    【自监督论文阅读笔记】Geography-Aware Self-Supervised Learning
    彻底搞懂同步异步与阻塞非阻塞
    layui使用富文本已经使用第三方插件Kz.layedit来优化layui的富文本
  • 原文地址:https://blog.csdn.net/Bright2017/article/details/133700978