express学习笔记

2018-01-22  本文已影响0人  卡布奇洛猫

关于req.body未定义的说明:
要读取req.body中的数据,需要安装body-parser插件
http://blog.csdn.net/u013438638/article/details/48953143
上面的链接有详细说明.
使用方法如下:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
//以下为路由配置
var routes = require('./routes/index');
var users = require('./routes/users');
...other code...

异步处理导致的Can't set headers after they are sent错误的说明
这是因为我在不该使用EventEmitter的地方使用了他,我的解决办法就是写一个合适的回调,直接把前端请求的数据传给他.
这不仅解决了我的问题,还使得代码更加简洁.

multer接收表单上传文件的问题:
在multer().single('fieldname')中的fieldname,指的是用于上传文件的'input'标签的name属性,而不是包裹他们的form标签的name属性.例如:
<input type="file" name="myForm" />,用这条标签上传的文件,需要用multer().single('myForm')进行接收,否则出现''Unexpected field"的错误.

multer对不同用户创建目录的方法:

app.use('***/:userPath',function(req,re,next){
  myMulterStorage.setPath(code_path);
  let storage = multer({storage: myMulterStorage.storage()});
  app.post('***',storage .***('***'),function(){})
})
myMulterStorage.setPath:
    let setPath = function (path) {
        myMulterStoragePath = path;
    };

let getPath = function () {
    return myMulterStoragePath;
};

       return multer.diskStorage({
          destination: function (req, file, cb) {
              cb(null, getPath());
        },
        filename: function (req, file, cb) {
            cb(null,file.originalname);
        // cb(null,true);
        }
    });

要实现每次创建不同的目录,需要写一个路径获取函数来获取路径,然后还需要以函数的返回值方式赋值给destination的cb函数.
如果直接给destination的cb函数赋值路径,那么那个路径只会在第一次运行的时候改变,其他时候不会改变,因为cb函数的执行上下文不同,在自定义存储引擎中赋值的路径只相当于是初始化.

express.static(root, [options]):
static的root参数,会改变express路由监听的url.
在没有设置root时,url:'/test'.
在将root设置为'ok'后,需要将路由的url设置为:'/ok/test'.
前端发送的url不需要修改,因为前端发送的url是主机名+端口名+root+url
http://www.expressjs.com.cn/starter/static-files.html

关于后台发送的html文件中js的地址不正确问题:
采用如下方法生成多文件夹时:
entry: {
'register/register':'./src/register_entry.js',
'file_upload/file_upload':'./src/file_upload_entry/file_upload_entry.js'
}
会使src的url缺少挂载路径,导致js文件无法载入.
解决方法就是使用正常的属性名,而不是能够生成文件夹的属性名:
index:'./entry_mobile.js'

关于使用根路径导致js和css等外部链接资源无法获取的问题:
使用'/'根路径时,应该这样写app,get('/',fun);
而不是app.use或app.post.
使用req.url可以查看浏览器访问的url.

跨域问题:
跨域问题只需要在服务端下如此设置就能解决.
app.all(url,function(req,res,next){
res.setHeader("Access-Control-Allow-Origin", "");
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Allow-Methods", "
");
res.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token");
res.setHeader("Access-Control-Expose-Headers", "*");
next();
});

上一篇下一篇

猜你喜欢

热点阅读