Tag: http

node 如何在文件数据上传完毕之前,获取文件的元数据

项目中需要对前台(我们的项目只是单纯的restful api,所以一些限制得做好)上传过来的文件进行校验,主要是大小和类型(扩展名),目前的做法是将文件通过 multiparty 解析form中的文件信息。我现在已经将原来的实现改成监测传入的part(multipart相关概念,大概类似于multipart/form-data 中的某一块),解析它包含的文件信息。但是还是有一些优化的想法,比如,如果能够在文件流传入结束之前检测到文件的类型和大小的话,那我就可以尽早的拒绝上传。但是,首先我不知道这个想法是否技术上可行(http是否支持),另外,由于对curl post数据时显示的东西不熟悉,短时间内也无法通过curl来分析上传的过程。 所以想请教一下,上面这两个问题。 这个想法技术上是否可行? 有什么方便的工具可以分析文件上传过程中,http报文的发送过程(如果文件元数据先独立发送,那么就有提前解析的可能了)。 这个不仅仅是个node相关的问题,只是因为实在做node项目的时候遇到的,所以才有这么一问。

express 接收http请求时怎么做异步回复

var app = require(‘express‘)();app.post(‘/getsomething’, function(req, resp){ //操作A:根据req去另一个地方请求数据(异步) //此时无法立即回复这个请求 }); 想要在操作A有结果的时候拿到当时的resp,可以回复这个请求resp.send(‘result’) 可以实现吗? 尝试按req的某个字段将resp存到redis中,当操作A有结果时取出来回复但是存redis时JSON.stringify(resp)失败, Converting circular structure to JSON 求大神指教

node.js或者express 是否支持禁用 http 的某些方法

如题,禁用的方法例如 (PUT, DELETE TRACE) 等 (注意:不是禁用客户端!!)node.js 或者 express 是否已经提供了相关的 API? 应该是没有相关的, 那就自行处理了!

koa 的 session 如何存储起来?

做login,logout登录后存储用户信息和登录状态等信息,使用了koa-session2模块 koa-session2 我过去用PHP的时候更多把他当做一种存储空间了,发现在koa里好像不是这么一回事了,等我登陆后,由其他路由发起请求,发现取不到session的值,更像是一个变量被释放了,想不明白是哪里的问题

为什么在post 的时候不能处理cookie了?

ctx.cookies.set(name, value, [options]) 设置 cookie 中名为 name 的值,options 为可选参数: signed: 是否要做签名 expires: cookie 有效期时间 path: cookie 的路径,默认为 /’ domain: cookie 的域 secure: false 表示 cookie 通过 HTTP 协议发送,true 表示 cookie 通过 HTTPS 发送。 httpOnly: true 表示 cookie 只能通过 HTTP 协议发送 注意:Koa 使用了 Express 的 cookies 模块,options 参数只是简单地直接进行传递。 这是koa设置cookie 的方法,然后我在get 的时候是能够使用的,post的时候却失败了,在本地环境下并没有跨域的问题吧?看了express 的cookie 方法也没什么特别的地方。 不太懂得是为什么了

前端获取8080端口服务的数据localhost:3000′ is therefore not allowed access.

node.js前端运行在localhost:3000,通过ajax获取运行在8080端口的java服务返回的数据报了这个错误:(local:8080/wechat/api/alarms/1) XMLHttpRequest cannot load http://localhost:8080/wechat/api/alarms/1. Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:3000’ is therefore not allowed access. js———————————————————————var alarmUrl=’http://localhost:8080/wechat/api/alarms’;mui.ajax({ url:alarmUrl+’/’+page, type:’GET’, dataType:’json’, success:function(data){ console.log(data); }, error:function(xhr,type,errorThrown){ //打印报错 console.log(xhr+’\n’+type+’\n’+errorThrown); } java——————————————————————-通过RESTful API接口对外提供数据 接口uri: /wechat/api/alarms/{page} node–app.js代码———————————————————–var express=require(‘express’);var app=express();var path=require(‘path’);var logger = require(‘morgan’);//logger(记录器),在控制台中,显示req请求的信息。var http=require(‘http’)//bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.var bodyParser=require(‘body-parser’);var […]

edge浏览器在只使用etag的情况下总是200 from cache

使用edge浏览器ajax访问一个url,返回一个json字符串。服务器使用expressjs,默认设置,只添加了etag,返回的http header在调试工具里是这个样子的 同样的url,chrome下是这样的 补充火狐下的样子 然后是使用js,console.log(xhr.getAllResponseHeaders())出来的结果edge下chrome下火狐下 而request header是这样的edge的火狐的chrome的 可以很不明显的看到edge没有if-none-match这一项,因为它坚持使用200 from cache,我只能删除cache才能让他访问服务器,所以edge的是第一次访问 现在的情况是,我需要通过js刷新这个url返回的json字符串,chrome和火狐都正常,不变的话就是304,变了就是200 OK,但是edge就是一定要200 from cache,并且可以看到node这里确实没有收到edge发来的请求,它直接就使用缓存了,很讨厌,大家知不知道有什么好的解决办法 ajax的代码是这样的 const AjaxGet = function( method, url, callback ){ var xhr = new XMLHttpRequest() xhr.open(method, url, true) xhr.withCredentials = true xhr.send() xhr.onreadystatechange = function(){ if((xhr.readyState == XMLHttpRequest.DONE) && (xhr.status == 200)){ callback(JSON.parse(xhr.responseText)) } } } ps.我觉得禁用etag应该不是个很好的主意,毕竟还是需要304的

为何我将content-type设置为image/jpeg后无法存储cookie?

import Koa from “koa”; import Router from “koa-router”; import request from “supertest”; const app = new Koa(); const router = new Router(); const client = request.agent(app.listen(3000)); router .get(“/”, async (ctx, next) => { try { let cv = ctx.cookies.get(‘temp’); if (cv) { console.log(cv)//第二次请求没有获取到cookie的值,cookie没有存储,可能是content-type设置有误 ctx.type = ‘image/jpeg’; ctx.body = ‘233’;//原本是一个buffer类型数据,这里简略 ctx.status = 200; } else { […]

node静态资源服务器设置了Cache-Control,但浏览器从来不走304

我使用node作静态资源服务器,返回一张普通的png图片。现在我给这个响应设置了Cecha-Control,希望可以让浏览器进行缓存。可是每次我刷新页面,都是返回200,从服务器请求资源。请问应该如何设置才能使用浏览器的缓存呢? 下面是node端代码: const fs = require(‘fs’) const http = require(‘http’) const url = require(‘url’) const server = http.createServer((req, res) => { let pathname = url.parse(req.url).pathname let realPath = ‘assets’ + pathname console.log(realPath) fs.readFile(realPath, “binary”, function(err, file) { if (err) { res.writeHead(500, {‘Content-Type’: ‘text/plain’}) res.end(err) } else { res.writeHead(200, { ‘Access-Control-Allow-Origin’: ‘*’, ‘Content-Type’: ‘image/png’, ‘ETag’: “666666”, […]

为什么koa下启用http压缩没有效果(始终是maxAge=0)?

我是用的koa-cache-control插件来设置cachecontrol的maxAge,不知道为什么照着API去做完全没有效果,始终maxAge=0.小白一枚求教附git插件链接 https://github.com/DaMouse404… var send = require(‘koa-send’); var Koa = require(‘koa’); var app = new Koa(); var Router = require(‘koa-router’); var cors = require(‘koa-cors’); var koaBody = require(‘koa-body’)(); var cacheControl = require(‘koa-cache-control’); var router = new Router({ prefix: ‘/public’ }); app.use(gzip()); app.use(cors()) .use(router.routes()) .use(router.allowedMethods()); app.use(cacheControl({ maxAge: 500 })); router.get(‘/:fname/:cname’, koaBody, function*() { var fname = this.params.fname; […]