Node.js + express 与 okHttp 链接实现数据上传( error:okHttp post 的 ’body‘ 为空 undefined )

2021-09-24 12:01:13 浏览数 (1)

思路使用 OkHttp-Utils 的 post, 向服务器发送用户信息(JSON 模式)

云服务器使用 express 框架的 post 方法,获得 客户端 post  的信息:

这里分两部分讲:

  • 客户端 okHttp-Utils 实现:
  • 服务器 Node.js 代码部署:

注意:由于我在 Node.js 中是采用了表单的形式来接收数据,所以在 okHttp 中也应该上传表单.

以下是客户端 okHttp-Utils 实现:

代码语言:javascript复制
    /** post 方法一:
     * ( 使用 okHttpUtils )
      */

    private void logIn(){
        OkHttpUtils.post()//
                .url("http://47.107.132.227/api/mysql/getifo")
                .addParams("nickname","000")
                .addParams("phone"   ,mUserPhoneNumber.getText().toString())
                .addParams("password",mUserPassword.getText().toString())
                .addParams("avatar"  ,"000")
//                .headers(headers)//
                .build()//
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        Toasty.error(LogUpActivity.this, "失败!请检查网络和输入格式 !-->"   e.getMessage(), Toast.LENGTH_SHORT, true).show();
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        Toasty.success(LogUpActivity.this, "欢迎加入我们!", Toast.LENGTH_SHORT, true).show();
                    }
                });
    }

以下是服务器 Node.js 代码部署:

这里记得添加 express mysql 等 npm 库依赖。

一、获得请求

代码语言:javascript复制
var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs')

var app = express();
var urlParser = bodyParser.urlencoded({extended : false})//处理 url 表单内容
var jsonParser = bodyParser.json()//处理 json 数据

var multer = require('multer');

// get guests's informations, and put them into mysql
app.post('/api/mysql/getifo', urlParser, function (req, res){
    var mysql = require('mysql');

    // //创建云服务器连接
    // var connection = mysql.createConnection({
    //   host     : 'localhost',
    //   user     : 'root',
    //   password : '',
    //   database : 'aliyun'
    // });
    
    // 创建本地连接
    var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : 'qaz123456',
        database : 'users'
    });

    mysql = require('./mysql');
    mysql.save(connection, res, req);
})

二、数据库操作

代码语言:javascript复制
var mysql = require('mysql');

// 保存
var save = function save(connection, response, params){
  // var myObj = JSON.parse((JSON.stringify(params)));
  var myObj = {
    "nickname" : params.body.nickname ,
    "phone"    : params.body.phone    ,
    "password" : params.body.password ,
    "avatar"   : params.body.avatar   ,
  };
  // customers guests
  var string = 'INSERT INTO customers(nickname,phone,password,avatar) VALUES('   '"'   myObj.nickname   '"'   ','   '"'   myObj.phone   '"'   ','   '"'   myObj.password   '"'   ','   '"'   myObj.avatar   '"'   ')';
  //插入数据
  connection.query(string, function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results);
    response.end(JSON.stringify(results));
  });
  connection.end();
}


module.exports = {
  save : save,
  select : select,
  outputall : outputall,
  modify : modify,
  deletes : deletes,
}

希望我的经验对你有帮助~~

0 人点赞