小编Ill*_*ian的帖子

当If-None-Match有效时304未修改

我正在优化Express JSON API以供iOS和Android应用程序使用,并且当Apps在If-None-Match标头中指定etag时,似乎无法让Express响应正确的304标头.

我不需要设置Etag生成,因为Express已经提供了这些; 但是当Apps在第二个请求中再次指定etag时; 对于数据,Express的响应仍然是200,正如你在Postman的测试中看到的那样:

邮递员请求具有正确的If-None-Match标头和200响应

如何启用此功能?

更新: iOS开发人员看到来自Express服务器的正确的304 Not Modified响应,但我不明白为什么我没有在Postman中看到它们 - Postman是否支持这样的操作?

etag caching node.js express postman

5
推荐指数
1
解决办法
4535
查看次数

SequelizeJS中的缓慢关联

我正在尝试诊断我的Express应用程序中使用SequlizeJS作为ORM的一些减速原因.我有一个模型,与其他2个模型有2x hasMany和aOne关系:

更新:我使用classMethods #association函数在define调用中建立了关联.

// Model1
classMethods: {
    associate: function(models) {
        Model1.hasMany(models.Model2);
        Model1.hasMany(models.Model3);
        Model1.hasOne(models.Model2, {as: 'next', foreignKey: 'model2_next'});
    }
}

// Model2
classMethods: {
    associate: function(models) {
        Model2.belongsTo(models.Model1, {foreignKey: 'model2_next'});
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我按以下方式查询它们:

db.Model1.find({
    where: { /* Simple where statement */ },
    include: [
        db.Model2,
        db.Model3,
        { model: db.Model2, as: 'next' },
    ]
}).complete(function(err, data) {
    res.json(data);
});
Run Code Online (Sandbox Code Playgroud)

响应可能需要8-12秒.但是,如果我单独查询Model2并使用async和lodash库手动合并它们:

async.parallel({
    model2: function(callback) {
        db.Model2.findAll({
            where: { /* Simple where statement */ }
        }).complete(callback)
    },
    model1: function(callback) {
        db.Model1.find({
            where: …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql node.js sequelize.js

3
推荐指数
2
解决办法
3939
查看次数

标签 统计

node.js ×2

caching ×1

etag ×1

express ×1

mysql ×1

postgresql ×1

postman ×1

sequelize.js ×1