node + express学习一(项目搭建)

开始前确保已经安装node和express

1、初始化项目

express ***(***你的项目名字)
cd ***
npm install(下载依赖)

启动项目:运行命令:node ./bin/www, 3001端口是我自己改的,在/bin/www里面(推荐使用WebStorm运行,因为我们要用它写代码)

node + express学习一(项目搭建)_第1张图片

2、代码编写

用WebStorm打开项目,点下面这个和命令node ./bin/www作用一样

node + express学习一(项目搭建)_第2张图片

也可以在aa.js里面添加app.listen(8088),然后运行http://127.0.0.1:8088(端口随便写)

app.js(部分代码)

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
app.use('/', indexRouter);
// 这里表示访问http://127.0.0.1:8088/users就是访问
app.use('/users', usersRouter);
app.listen(8088)
module.exports = app;

在routes/users里面添加如下代码,写一个通过code获得微信oppenId的接口



var http = require('https');
var url = require('url');
var appId = '你的appaId';
var sessionKey = '你的sessionKey';

/**
 * 获得oppenId
 */
router.post('/getOppenId', function (req, res, next) {
    var data = {
    };
    data = JSON.stringify(data);
    var opt = {
        // hostname:'https://api.weixin.qq.com',
        hostname: url.parse( 'https://api.weixin.qq.com').hostname,
        method:'get',
        path:`/sns/jscode2session?appid=${appId}&secret=${sessionKey}&js_code=${req.body.code}&grant_type=authorization_code`,
        headers:{
            "Content-Type": 'application/json',
            "Content-Length": data.length
        }
    }
    let respon = res;
    var body = '';
    var req = http.request(opt, function(res) {
        res.on('data',function(data){
            body += data;
        }).on('end', function(){
            respon.json({"data": JSON.parse(body)});
        });
    }).on('error', function(e) {
        console.log("error: " + e.message);
    })
    req.write(data);
    req.end();


});

这样就可以通过http://127.0.0.1:8088/users/getOppenId获得oppenId了。

注意:
1、hostname不能直接用'https://api.weixin.qq.com',要用url.parse( 'https://api.weixin.qq.com').hostname
2、获得oppenId是参数必须拼在连接上。否则会报错:{"errcode":40013,"errmsg":"invalid appid"}
3、如果用var http = require('http')会出现错误:{"errcode":43003,"errmsg":"require https hint: [gyW4pa0803re59]","expires_in":null},不知道是应为我调用改的第三方接口是https还是什么,没有试过

*直接这样去让别个调用的话可能会出现跨域,在app.js里面加上如下代码解决跨域;

 app.all('*',function (req, res, next) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
        res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    
        if (req.method == 'OPTIONS') {
            // res.send(200); /让options请求快速返回/
            res.sendStatus(200)
        }
        else {
            next();
        }
    });

下一篇sequelize操作数据库链接描述
小白一个,有错轻喷,忘指出

你可能感兴趣的:(node + express学习一(项目搭建))