Node-red物联网教程10:二次开发基础(express)

Node-red内置的web框架使用的是express,深入研究node-red源码,或者基于node-red进行二次开发,express是必须要深入学习的一个知识点.

威武哥对express的使用做了详细介绍,希望对大家的学习有所帮助.

1.安装

npm install express

2.启动

const expresss = require("express")

const app = express()

app.use('/static',express.static('public')) //静态文件夹

app.get('/',function(req,res){
    res.send('hello world');
})
app.listen(3000,function(){
    console.log('server is running on port:3000')
})

3.跨域问题

安装cors包
npm install cors --save
const expresss = require("express")

const app = express()

app.use(require('cors')())
app.use('/static',express.static('public')) //静态文件夹

app.get('/',function(req,res){
    res.send('hello world');
})
app.listen(3000,function(){
    console.log('server is running on port:3000')
})

4.设置一个中间件

app.use(function(req,res,next){
    next()
})

5.设置一个错误处理器

app.use(function(err,req,res,next){
    
})

6.获得get数据

  • req.query

  • req.params

7.获得post数据

旧版在express中没有内置获取表单的API,需要加载中间件body-parser,可以通过req.body获得表单数据

npm install body-parser

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})

新版express中,已经内置了body-parser

const express = require('express')
const app = express()

app.use(express.urlencoded({extend:false}))
app.use(express.json())

8.路由

1.

//router.js中
var express = require("express")
router=express.Router()
router.get('/',function(req,res){
    
})
module.exports=router

//app.js中
var router = require("./router.js")
//挂载路由
app.use(router)

2.

//index.js
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;



//users.js
var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

module.exports = router;


//main.js

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

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

9.静态资源

app.use('/static',express.static(path.join(__dirname, 'public')));

//如果要使用多个静态资源目录,请多次调用 express.static 中间件函数:
app.use(express.static('public'))
app.use(express.static('files'))

10.模板引擎

// view engine setup
//以pug模板引擎为例
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

使用art-template模板引擎

npm install --save art-template
npm install --save express-art-template


var express = require('express');
var app = express();

// view engine setup
app.engine('art', require('express-art-template'));
app.set('view', {
    debug: process.env.NODE_ENV !== 'production'
});
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'art');

// routes
app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});




//配置使用art-template模板引擎
//第一个参数表示,当渲染以.art结尾的文件时候,使用art-template模板引擎
app.engine('art',require("experss-art-template"))
//render方法默认是不可使用的,但是如果配置了模板引擎就可以使用了
//res.render('html模板名称',{模板数据})
//.art使用不方便,可以直接使用.html
app.engine('html',require("express-art-template"))
//render时默认寻找views文件夹
//如果想要修改默认的views目录,可以使用:
//app.set('views',render函数的默认路径)

app.get('/',function(req,res){
    res.render('index.html')
})
学习更多知识,加QQ群:1098090823
威武网 » Node-red物联网教程10:二次开发基础(express)

提供最优质的资源集合

立即查看 了解详情