nodejs之express(二)get和post请求

获取请求中的参数,nodejs的 express框架 提供了四种方法来实现。

    

  1.   req.body----解析body不是nodejs默认提供的,需要载入body-parser中间件才可以使用req.body;此方法通常用来解析POST请求中的数据.

    2. querystring--使用于post请求--var querystring = require('querystring'); querystring.parse(post)

    3.req.query-----nodejs默认提供,无需载入中间件;多用于解析get请求的参数;

    4.req.params----nodejs默认提供,无需载入其他中间件;多适用于restful风格url中的参数的解析,req.query与req.params的区别,req.params包含路由参数(在URL的路径部分),而req.query包含URL的查询参数(在URL的?后的参数)


======get请求====

在终端中执行node /Users/wofu/Desktop/node/app.js人如果出现上面的Server running at http://127.0.0.1:8000/就说明成功了


//iOS 端发出的请求:

-(void)post{
    NSLog(@"POST请求");
    NSString *url=@"http://127.0.0.1:8081/post";
    NSDictionary *params=@{@"name":@"lambo",
                           @"age":@"20"
                           };
    [NetworkManager postRequestWithUrl:url params:params successBlock:^(NSURLSessionDataTask *task, id responseObject) {
        
    } failureBlock:^(NSURLSessionDataTask *task, NSError *error) {
        
    }];
    
}
-(void)get{
    NSLog(@"get请求");
    //加参数方法一:
//    NSString *url=[@"http://127.0.0.1:8081/get" stringByAppendingString:@"?name=lambo&age=20"];
    
//加参数方法二
    NSString *url=@"http://127.0.0.1:8081/get";
    NSDictionary *params=@{@"name":@"lambo",@"age":@"20"};
    
    [NetworkManager gettRequestWithUrl:url params:params successBlock:^(NSURLSessionDataTask *task, id responseObject) {
        
    } failureBlock:^(NSURLSessionDataTask *task, NSError *error) {
        
    }];

    
}


导入express:npm install express

*********app.js**********

创建服务器,分发路由:

var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/get.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
// var routes=require('./routes/post.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
routes.router(app);//调用路由
var server = app.listen(8081, function () {


  var host = server.address().address;
  var port = server.address().port;
  console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面
console.log(host);//主机地址
console.log(port);//端口号
  console.log("应用实例,访问地址为 http://%s:%s", host, port);
});


get请求:

var router = function(app){
  var url = require('url');
    app.get('/get', function (req, res) {
      // res.writeHeader(200, {'Content-Type':'text/html;charset=UTF-8'});
      // res.writeHeader(200, {'Content-Type':'text/plain;charset=UTF-8'});
      res.writeHeader(200, {'Content-Type':'application/json;charset=UTF-8'});
      // res.writeHeader(200, {'Content-Type':'text/json;charset=UTF-8'});

//************获取参数和url
console.log(req.url);//******结果:   /get?age=20&name=lambo
 console.log(url.parse(req.url).pathname);// ***结果:/get ***需要先引入 var url = require('url');
 console.log(url.parse(req.url).query);// ***结果:age=20&name=lambo *** 需要先引入   var url = require('url');
 console.log(req.query);//{ name: 'lambo', age: '20' }
 console.log(req.query.name);// lambo
//************
       // 输出 JSON 格式
       var json = JSON.stringify({
           msg:"成功",
           result:[{
                    "name":"菜鸟教程",
                     "site":"http://www.runoob.com"
                   },{
                     "name":"新手教程",
                     "site":"csdnnnn"
                   }],
           status:1
});

// res.write(json);//如果要在浏览器上显示就用这个,并且还要加上res.end()方法;否则网页一直在加载;
res.end(json);//如果要传给前端数据(这时就不能执行 res。write() 方法),一定要用这个方法,这个方法也可以在浏览器上显示;
    })
};
exports.router = router;

吧下面的方法放在router方法中:用来返回当路由不存在的时候返回提示:

    app.use(function  (req,res,next) {         // 设置404页面,如果路由不存在,就执行这个监听

    res.status(404);
    res.send('404 - Not Found')
  });




************routes.js****************

表单提交get请求:

var router = function(app){
  // Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。
  // 你可以使用 express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,你可以这么写:
  // app.use(express.static('public'));


    app.get('/one', function (req, res) {
       res.sendFile("/Users/wofu/Desktop/node/views" + "/" + "one.html" );//显示静态网页
    })
    //这一个是表单提交后请求的
    app.get('/two', function (req, res) {
       // 输出 JSON 格式
       var response = {
           "first_name":req.query.first_name,//从请求中获取的参数
           "last_name":req.query.last_name//从请求中获取的参数
       };
       console.log(response);//控制台打印的json
       res.end(JSON.stringify(response));//输出一个json对象到浏览器
    })
};
exports.router = router;

获取get参数:

 console.log(req.url);///one?name=lambo

console.log(url.parse(req.url).pathname);//  /one

 console.log( url.parse(req.url).query );//  name=lambo
 console.log(
req.query );//{ name: 'lambo' }
 console.log(
req.query.name );//lambo

***********one.html***********

<html>
<body>
<form action="http://127.0.0.1:8081/two" method="GET">
First Name: <input type="text" name="first_name">  <br>
Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>

===================POST请求==============


var router = function(app){
  var bodyParser = require('body-parser');//解释参考http://blog.csdn.net/yanyang1116/article/details/54847560

// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.post('/post', urlencodedParser, function (req, res) {//第二个参数是用一种解析方式解析
console.log(req.body);//{ age: '20', name: 'lambo' }---body是从客户端传过来的参数
console.log(req.body.name);//lambo----参数name的值
 // 输出 JSON 格式
 var json = JSON.stringify({
     msg:"成功",
     result:[{
              "name":"菜鸟教程",
               "site":"http://www.runoob.com"
             },{
               "name":"新手教程",
               "site":"csdnnnn"
             }],
     status:1
});
// res.write(json);//如果要在浏览器上显示就用这个,并且还要加上res.end()方法;否则网页一直在加载;
res.end(json);//如果要传给前端数据(这时就不能执行 res。write() 方法),一定要用这个方法,这个方法也可以在浏览器上显示;
});
};
exports.router = router;



*********** routes.js***********************

表单提交post请求:

body-parse解析post请求参数:

var router = function(app){

  // Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。
  // 你可以使用 express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,你可以这么写:
  // app.use(express.static('public'));


  var bodyParser = require('body-parser');//解释参考http://blog.csdn.net/yanyang1116/article/details/54847560


// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.get('/one', function (req, res) {
 res.sendFile( "/Users/wofu/Desktop/node/views" + "/" + "one.html" );
})

app.post('/two', urlencodedParser, function (req, res) {//第二个参数是用一种解析方式解析

 // 输出 JSON 格式
 var response = {
     "first_name":req.body.first_name,
     "last_name":req.body.last_name
 };
 console.log(response);
 res.end(JSON.stringify(response));
})
};

exports.router = router;

***********querystring解析post请求参数—*****************************************

app.post('/one',function (req, res) {

var post=''; 
req.on('data',function(chunk){
  post +=chunk; 
});
req.on('end',function(){//req的data事件监听
post=querystring.parse(post);
console.log('收到参数email:'+post['email']); 
});

});


*******one.html****************

<html>
<body>
<form action="http://127.0.0.1:8081/two" method="POST">
First Name: <input type="text" name="first_name">  <br>


Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>





  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Node.js是一个基于Chrome V8 JavaScript引擎的JavaScript运行环境,可用于服务器端编程。Express是一个基于Node.js平台的Web应用开发框架,提供了简单易用的API,可以快速构建Web应用程序。Mongoose是一个优秀的Node.js模块,用于连接MongoDB数据库,并提供了丰富的API来操作MongoDB数据库。 下面是使用Node.js、Express、Mongoose操作MongoDB的基本流程: 1. 安装Node.js、Express和Mongoose 在终端中执行以下命令: ``` npm install node npm install express npm install mongoose ``` 2. 连接MongoDB数据库 在app.js或server.js文件中,使用Mongoose连接MongoDB数据库: ``` var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); ``` 3. 定义数据模型 在models目录下创建一个JavaScript文件,使用Mongoose定义数据模型: ``` var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ name: String, age: Number, email: String }); module.exports = mongoose.model('User', UserSchema); ``` 4. 实现API接口 在routes目录下创建一个JavaScript文件,实现API接口: ``` var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.get('/users', function(req, res, next) { User.find(function(err, users) { if (err) return next(err); res.json(users); }); }); router.post('/users', function(req, res, next) { var user = new User(req.body); user.save(function(err) { if (err) return next(err); res.json(user); }); }); router.get('/users/:id', function(req, res, next) { User.findById(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); router.put('/users/:id', function(req, res, next) { User.findByIdAndUpdate(req.params.id, req.body, function(err, user) { if (err) return next(err); res.json(user); }); }); router.delete('/users/:id', function(req, res, next) { User.findByIdAndRemove(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); module.exports = router; ``` 5. 启动Express应用 在app.js或server.js文件中启动Express应用: ``` var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var userRoute = require('./routes/user'); app.use(bodyParser.json()); app.use('/api', userRoute); app.listen(3000, function() { console.log('Server listening on port 3000'); }); ``` 6. 测试API接口 通过Postman等工具测试API接口。例如: - GET http://localhost:3000/api/users - POST http://localhost:3000/api/users - GET http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - PUT http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - DELETE http://localhost:3000/api/users/5f3e7003c3e1c12345678901 这样就完成了使用Node.js、Express、Mongoose操作MongoDB的基本流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值