好好学习,天天向上,懒惰、颓废让我越来越糟糕,所以分享一下,共同学习
纯node.js搭建一个小服务,下图为文件目录结构,很简单,很小

log文件是自动生成的

index.js文件

const url = require('url');
const http = require('http');
const fs = require('fs');
const { Console } = require('console'); let hostname = '127.0.0.1';
let port = 8080; var curURL = '' // 读取文件,处理编码问题
function readText (pathname) {
let bin = fs.readFileSync(pathname)
if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
bin = bin.slice(3)
}
return bin.toString('utf-8')
} // 获取当前的时间
function getCurrentDate () {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth()+1;
let day = date.getDate();
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
let curDate = year + '年' + month + '月' + day + '日 ' + hour + ':' + minute + ':' + second;
return curDate
} // 创建 HTTP 隧道代理
const server = http.createServer((req, res) => {
var pathname = url.parse(req.url).pathname;
// 过滤掉favicon的请求,不然log里面会有这个url
if(pathname !== '/favicon.ico'){
curURL = `http://${hostname}:${port}${req.url}`
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.writeHead(200, { 'Content-Type': 'application/json' });
console.log(readText('./user.json'))
res.end(readText('./user.json'))
getLog()
}
}); // 打印日志模块
function getLog () {
let options = {
encoding: 'utf-8',
flags: 'w'
}
// 判断文件是否存在
if (fs.existsSync('./Log.log')) {
options.flags = 'r'
} const output = fs.createWriteStream('./Log.log', options);
const errorOutput = fs.createWriteStream('./Log.log',options);
const logger = new Console({ stdout: output, stderr: errorOutput });
// 获取当前的时间
let curDate = getCurrentDate ()
let logs = `[${curDate}]=====URL路径:${curURL}\n`
console.log(logs)
// 将新的内容写入日志,并且不删除原来的
fs.appendFile('./Log.log',logs,'utf8',function(err, ret) {
if(err) {
throw err
}
})
logger.log(logs);
} server.listen(port, hostname, () => {
console.log(`服务运行在 http://${hostname}:${port}/`);
});
user.json 文件
1 {
"name": "白晶晶(醉盏)",
"attr": "这是一个很懒的小仙女",
"server": "Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效"
}

打印结果:

网页输入地址:http://localhost:8080

node.js启动服务,不依赖第三方的更多相关文章

  1. Node.js启动服务报错SyntaxError: Unexpected token import

    启动服务报错如下: Last login: Wed Nov :: on ttys000 localhost:~ sipeng$ cd /Users/sipeng/Desktop/彭思/2017年学习/ ...

  2. 个推Node.js 微服务实践:基于容器的一站式命令行工具链

    作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 1. 每次新建项目都需要安装一次依赖,这些依赖之 ...

  3. 利用OpenShift托管Node.js Web服务进行微信公众号开发

    最近写了一个微信的翻译机器人.用户只要关注该公众号,发送英文的消息,就能收到中文翻译的回复.有兴趣的读者可以扫描下面的二维码关注该公众号,尝试发送英文单词试试看.(有时候第一次发送单词会收到“该公众号 ...

  4. node.js启动调试方式

    node.js启动调试方式(nodeJs不能像js一样在控制台调试) 以express项目为例,启动路径是localhost:3000 一.通过node命令启动 node server/bin/www ...

  5. 用node.js启动mock.js

    Node.js Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP.Python.Perl.Ruby 等服务端语言平起平坐的脚本语言.官网下载n ...

  6. node安装启动服务

    一.下载安装包: node下载地址:https://nodejs.org/en/download/,根据自己电脑的配置下载相应的windows64位安装包,下载完成后,进行安装.下面我用的8.9.0版 ...

  7. Serverless Web Function 实践教程(一):快速部署 Node.js Web 服务

    作为目前广受欢迎的 Web 服务开发语言,Node.js 提供了众多支持 HTTP 场景的相关功能,可以说是为 Web 构建而生.因此,基于 Node.js,也诞生了多种 Web 服务框架,它们对 N ...

  8. Node.js微服务实践(一)

    什么是微服务 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任务.在所有情况下 ...

  9. Node.js建立服务、路径处理与响应

    通过Node.js创建一个web服务器,要写的代码可能不是最少的,但是一定是最容易理解的. 用6行代码创建的web服务器 当在浏览器中访问http://127.0.0.1:1337会看到自定义的字样 ...

随机推荐

  1. 【Linux】【二】linux 压缩文件(txt)、查看压缩文件内容、解压缩文件、

    通过Xshell 压缩文件.解压缩文件 gzip tools.txt 压缩[tools.txt]文件 zcat tools.txt.gz   查看压缩文件[tools.txt.gz]内容 gunzip ...

  2. 【学习笔记】python3中yaml文件使用

    1.yaml -> 字典:用yaml.load()或yaml.safe_load(YAML字符串或文件句柄),如yaml中有中文,可以使用.encode('utf-8')或打开文件时指定enco ...

  3. oracle_协议适配器错误_协议适配器不可加载_TNS监听程序在connect-data中未获得service-name

    最近在使用powerdesigner连接远程oracle进行反向工程操作时,出现了一些问题,这些问题很普遍,大多是由于配置引起的 说明:(1)远程数据库版本问 oracle11g 64bit (2)本 ...

  4. mysql命令行备份方法

    一.mysql备份 1.备份命令 格式:mysqldump -h主机IP -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql # 本地备份可以不添加端口和主机IP ...

  5. C#中StringBuilder类的使用总结

    String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新 ...

  6. Bootstrap+JSP实例学习笔记一.简单的带登录功能的首页

    前言 Bootstrap 是流行的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.源自于twiteer内部的开发框架. 当前(2019-05)最新版本是v3.3. ...

  7. ns2的第一个tcl脚本

    set ns [new Simulator] set tracef [open example1.tr w]$ns trace-all $tracefset namtf [open example1. ...

  8. 【VS开发】CTimeSpan类

    CTimeSpan类.        日期和时间类简介        CTime类的对象表示的时间是基于格林威治标准时间(GMT)的.CTimeSpan类的对象表示的是时间间隔.        CTi ...

  9. nginx文件路径配置(root|alias)

    nginx指定文件路径主要有两种方式:root|alias. 那么他们究竟有什么区别呢? 指令的使用方法和作用域: [root] 语法:root path 默认值:root html 配置段:http ...

  10. luoguP1379-八数码难题(双向bfs)

    题目链接:https://www.luogu.org/problemnew/show/P1379 题意:用字符串表示八数码,求根据给定八数码得到末状态“123804765”最少的步数. 思路:这题很方 ...