1.Port 3000 is already in use
当我们使用node.js开发后端,在调试的时候遇到 Port 3000 is already in use,怎么办呢?别急,两条命令解决:
MBP:~ lianwyu02$ lsof -i tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 1234 lianwyu02 29u IPv6 0xf8ad63009a97fd73 0t0 TCP *:hbci (LISTEN)
MBP:~ lianyu02$ kill -9 1234
分别是找到对应的端口号占用的进程,然后把他杀掉就可以了。
'use strict'
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resourcewww');
});
router.get('/list', function(req, res, next) {
console.log("req",req);
console.log("res",res);
res.send({name:"张三2221",age:25});
});
router.post('/detail',function (req,res,next) {
console.log("req",req);
console.log("res",res);
res.send({id:req.body.id,name:req.body.name,age:req.body.age});
});
module.exports = router;
如上图代码,当我们使用get测试的时候,发现一点问题都没有,然后试试post来写接口,发现根本调用不了,后来百度,发现原来要引入bodyParser,于是我们在终端安装body-parser
npm install body-parser
然后到app.js里面
···
// 引入json解析中间件
var bodyParser = require('body-parser');
···
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
然后兴高采烈的跑到postman去继续调试自己写的接口,采用调试模式,发现
console.log("req",req);//这里的req.body依然为空
这是为什么呢?看下图
![](https://img.haomeiwen.com/i13222032/cdc6e95d7f0fbb01.jpeg)
后来发现原来选择的是1处,点击选择2处,去调用,发现req.body拿到传过去的数据了,万分开心,但是我们要使用1处也支持呢?怎么办?于是百度总结了下我们需要multer这个神器中间件。
继续安装
npm install multer@0.1.8//我使用的是这个版本
在app.js里面继续引入
···
var multer = require(‘multer’);
···
app.use(multer());//使用这个中间件
再次回到postman,调用,选择第一个,完美解决问题。
总结:常用四种格式的post数据,分别为:
www-form-urlencoded,
form-data,
application/json,
text/xml
下图介绍前三种。node.js的中间件,至于这四种详细的解释,请大家自行百度学习
var express = require(‘express’);
var bodyParser = require(‘body-parser’);
var multer = require(‘multer’);
var app = express();
//for parsing application/json
app.use(bodyParser.json());
//for parsing application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
//for parsing multipart/form-data //需要用npm install multer@0.1.8
app.use(multer());
网友评论