美文网首页
express学习笔记

express学习笔记

作者: 卡布奇洛猫 | 来源:发表于2018-01-22 10:40 被阅读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();
    });

    相关文章

      网友评论

          本文标题:express学习笔记

          本文链接:https://www.haomeiwen.com/subject/zyqlaxtx.html