xinxin?

Node:使用express搭建一个简易的服务器

①安装node环境

在node.js官网下载LTS长期支持版本,然后傻瓜式安装

②查看是否安装成功

打开cmd终端,输入node -v 有版本号,则安装成功。再输入npm -v 有版本号,则npm也安装成功

③使用express脚手架创建项目

方法一:
      >> 安装脚手架: npm i -g express-generator
      >> 项目的创建
        * 打开终端,进入某个目录
        * express --view=ejs 项目名字
        * cd 项目名字
        * 安装相关依赖(三方模块):npm i
        * 运行项目:npm start
方法二:
        * 不需要全局安装脚手架 express-generator
        * npx express-generator --view=ejs 项目名字
        * cd 项目名字
        * 安装相关依赖(三方模块):npm i
        * 运行项目:npm start
 
④对创建好的项目进行一些自己个性化的配置
文件目录结构
 1、在bin/www文件中
将
server.listen(port);

改为
server.listen(port,()=>{
  console.log(`running ${port}...`)
});

  终端控制台效果:

2、实现代码的热加载,使得不用每次改完代码,就需要重新npm start。(注意:更改配置文件,还是得重新npm start)

  安装npm插件nodemon

npm install -g nodemon

  在package.json文件中

"scripts": {
    "start": "node ./bin/www"
  },

改为
"scripts": {
    "start": "nodemon ./bin/www"
  },

3、app.js中的代码

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

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')));

//改动1// 利用 CORS 解决跨域
app.all('*', function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*'); // *允许任意地址访问。解决跨域后携带cookie问题req.headers.origin
    // res.header("Access-Control-Allow-Credentials", "true"); //是否包含cookie,如果不包含,可省略
    res.header('Access-Control-Allow-Methods', 'GET,POST,PATCH,PUT,OPTIONS,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization,Cookie,Accept,Token,Origin');
    next(); // 继续下一个中间件的处理
});

//改动2 //统一进行路由拦截:session、cookie版
// app.all('*', (req, res, next) => {
//     console.log('请求地址',req.url);
//     if (req.url == '/pages/login' || req.url == '/users/login' || req.url =='/users/register') { // 如果是登录页或者是登录请求和注册请求
//         next(); // 该干嘛干嘛去
//     } else {
//         if (req.session.sign) { // 判断权限
//             next(); // 登陆后想访问什么页面直接访问
//         } else {
//             res.redirect('/pages/login'); // 未登录,重定向到登录页
//         }
//     }
//     console.log('权限',req.session.sign);
// });

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  console.log('服务器500错误:', err); //改动3
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

⑤检测服务器是否搭建成功

在终端运行命令npm start。在浏览器访问http://localhost:3000/,能出来页面则证明服务器搭建成功

⑥自己配置路由

1、在routes文件下新建js文件(这里就不新建了,使用项目已经有的文件)

  在index.js中

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Hello World!' });  //渲染views/index.ejs文件
});

module.exports = router;

  在users中

var express = require('express');
var router = express.Router();

router.post('/xixi', function(req, res, next) {
  const {name}=req.body  //获取post请求的参数
  res.json({
    txt:`我是${name}返回的数据`
  });
});
router.get('/xixi2', function(req, res, next) {
  const {name}=req.query  //获取get请求的参数
  res.json({
    txt:`我是${name}返回的数据`
  });
});

module.exports = router;

2、在app.js文件中配置

//注意:这里项目初始化已经配置好了,若是新建的路由则需要自己配置

//首先引入文件模块
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

//其次
app.use('/', indexRouter);
app.use('/users', usersRouter);

3、我们已经可以请求两个地址

api1 = 'http://127.0.0.1:3000/users/xixi'
api2 = 'http://127.0.0.1:3000/users/xixi2'

**至此,一个简易的服务器已经搭建成功

 

⑦从数据库中获取数据

1、在根路径下新建一个module文件,此时的文件目录

  首先运行npm install mysql,安装mysql依赖。然后在module文件下新建一个mysqlModule.js文件,配置连接池

const mysql = require('mysql');
const pool = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: 'root',
    database: 'address_list',
    post: 3306
});


const query=function(sql,options){
    return new Promise((resolve,resject)=>{
        pool.getConnection(function(err, connection) {
            if (err) return resject(err);
            connection.query(sql, options, function(err2, result) {
                if (err2){
                    resject(err2);
                }else{
                    resolve(result);
                }
                connection.release(); // 释放连接池
            });
        });
    });
}


module.exports=query;

2、重新配置router/users.js文件

var express = require('express');
var router = express.Router();
const query = require('../module/mysqlModule.js');

/* GET users listing. */
router.post('/xixi', function(req, res, next) {
  const {name}=req.body
  const sql=`SELECT user_tel FROM users WHERE user_name=?`
  query(sql,[name])
    .then(data=>{
      res.json({
        state: '200',
        data
      });
    })
    .catch(err=>{
      res.json({
        state: '0',
        msg: '查找失败',
        err
      })
    })
});
router.get('/xixi2', function(req, res, next) {
  const {name}=req.query
  const sql=`SELECT user_tel FROM users WHERE user_name=?`
  query(sql,[name])
    .then(data=>{
      res.json({
        state: '200',
        data
      });
    })
    .catch(err=>{
      res.json({
        state: '0',
        msg: '查找失败',
        err
      })
    })
});

module.exports = router;

 

posted on 2020-07-25 11:05  xinxin?  阅读(546)  评论(0编辑  收藏  举报

导航